当前位置: 首页 > news >正文

C#属性和字段

C#中的属性和字段

类成员包括变量和方法。如果希望其他类能够访问成员变量的值,就必须定义成公有的,而将变量设为公有public,那这个成员变量的就可以被任意访问(包括修改,读取),这样不利于数据安全。

属性可以当作对字段的封装,字段内部使用,属性因为安全性高可以外部使用.属性比字段,多设了get和set属性

最初定义一个Person类,存在字段age

    class Person
    {
        public int age;
    }

调用

   Person person = new Person();
   person.age = 1000;
   Console.WriteLine(person.age);

 这时候发现人的年龄不可能是1000,并且由于age是public的任意地方都可以修改,这样很不安全,但是如果把age设置为private又无法进行调用,所以考虑使用方法封装一个这个字段

class Person
    {
        private int age;
        public int GetAge()
        {
            return age;
        }
        public void SetAge(int age)
        {
            if (age > 100)
            {
                //数据错误处理
            }
            else
            {
                this.age = age;
            }           
        }
    }

调用

    Person person = new Person();
    person.SetAge(90);
    Console.WriteLine(person.GetAge());

 这样就实现了对字段的封装,取值使用Get方法,赋值使用Set方法

在C#中可以使用属性来解决这种问题

在属性get/set中加入逻辑判断

class Person
    {
        private int age;
        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                if (value > 100)
                {
                    throw new Exception("数据异常");
                }
                else
                {
                    age = value;
                }
            }
        }
    }

 如果没有任何逻辑处理就可以使用自动实现的属性

    class Person
    {
        public string Name { get; set; }
    }

 等价于

     private string name;
     public string Name
     {
         get { return name; }
         set { value = name; }
     }

 使用访问修饰符或者通过省略get/set方法创建只读或只写属性

    class Person
    {
        public string Name { get; private set; }
        public int Age { private get; set; }
    }

 在 C# 6 和更高版本中,你可以像字段一样初始化自动实现属性

public string Name{ get; set; } = "Wang";

转载于:https://www.cnblogs.com/GnailGnepGnaw/p/10622090.html

相关文章:

  • 记录一次自己对nginx+fastcgi(fpm)+mysql压力测试结果
  • 02 Redis关闭服务报错---(error) ERR Errors trying to SHUTDOWN. Check logs.
  • 近况
  • 微软亚洲研究院等提出CNN训练新方法RePr,准确率显著提升
  • 平时遇到一些问题的汇总收集(mvc)
  • 重要知识点:如何降低DNS***的风险
  • [转载]来个强悍的的吧 教你在Mac下隐藏文件,别做坏事哟
  • 多网卡捆绑bonding
  • 模块管理常规功能自己定义系统的设计与实现(53--演示程序和视频解说 )
  • 新一代视频AI服务,阿里云智能视觉重磅发布
  • 从代码看 asp.net 处理过程
  • CentOS 7 Shell脚本编程第十二讲 case语句
  • 酷不酷,就来看我家的车库!李彦宏说“我们的无人车刚换了大车库”
  • python:使用Fabric自动化你的任务
  • 用Swift写输入日期计算天数的Demo
  • python3.6+scrapy+mysql 爬虫实战
  • eclipse(luna)创建web工程
  • Effective Java 笔记(一)
  • exports和module.exports
  • GraphQL学习过程应该是这样的
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Lucene解析 - 基本概念
  • MySQL用户中的%到底包不包括localhost?
  • Node 版本管理
  • Python利用正则抓取网页内容保存到本地
  • V4L2视频输入框架概述
  • vue-loader 源码解析系列之 selector
  • Vultr 教程目录
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 当SetTimeout遇到了字符串
  • 关于springcloud Gateway中的限流
  • 时间复杂度与空间复杂度分析
  • 跳前端坑前,先看看这个!!
  • 学习使用ExpressJS 4.0中的新Router
  • 一道面试题引发的“血案”
  • 用Canvas画一棵二叉树
  • 06-01 点餐小程序前台界面搭建
  • Java性能优化之JVM GC(垃圾回收机制)
  • 容器镜像
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​马来语翻译中文去哪比较好?
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #传输# #传输数据判断#
  • $ git push -u origin master 推送到远程库出错
  • (2)(2.10) LTM telemetry
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (三分钟)速览传统边缘检测算子
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • .form文件_SSM框架文件上传篇
  • .net core 连接数据库,通过数据库生成Modell
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .net 无限分类
  • .NET4.0并行计算技术基础(1)