5类的属性和字段

字段

用于存储数据,一般在类中访问权限设置为private,仅在本类中可以访问,防止外界直接访问。

属性

属性的作用就是保护字段、对字段的赋值和取值进行限定。
外部需要访问或者设置字段的值都应该通过属性来设置或者访问,属性就是为了保护字段
属性的本质就是两个方法组成的(get,set)。
在属性的get里判断的是字段的值,在set里是判断value的值,如果属性有get和set我们称为可读可写属性,只有get我们称为只读属性

字段和属性一般都是搭配使用,格式如下:

 	private string _name;//姓名字段,字段 就是用来存数据的,属性是用来设置字段的访问或者修改权限的

        public string Name  //姓名 字段的属性
        {
            get { return _name; }
            set { _name = value; }

        }

get { return _name; } 的内部原理如下:

        public string get_Name()
        {
            return this._name;
        }

set { _name = value; }的 内部原理如下:

        public void set_Name(string value)
        {
            this._name = value;
        }

在外部实例化一个类的实例,在对属性赋值的时候,是通过属性的set方法来对字段进行设置的,而输出属性的时候是通过调用get方法来读取字段的值。

一般可以在属性的get或者set里做一些限定,防止错误数据存入字段。

比如:创建一个人的类

 private string _name;//姓名字段,字段 

        public string Name  //姓名 字段的属性
        {
            get { return _name; }
            set { _name = value; }

        }
		
		private int _age;//年龄字段

        public int Age//年龄字段的属性
        {
            get { return _age; }
            set//设置修改set的时候的权限
            {
                if (value < 0 || value > 100)
                {
                    value = 0;
                }

                _age = value;
            }
        }
		
		private char _sex;//性别字段

        public char Sex//性别字段的 属性
        {
            get//设置读取get的时候的权限
            {
                if (_sex != '男' && _sex != '女')
                {
                    _sex = '男';
                }
                return _sex;
            }
            set { _sex = value; }
        }
		
		//人的方法,吃喝拉撒睡
		public void CHLSS()
        {
            Console.WriteLine("我叫{0},我今年{1}岁了,我是{2}生,我会吃喝拉撒睡", this.Name, this.Age,this.Sex);
        }
		

在外面实例化一个对象的时候,即使年龄和性别乱写,也会有默认值

 Person Zhang = new Person();    //类的实例化

            Zhang.Name = "张三";  //对象的初始化
            Zhang.Age = -18;        //对象的初始化
            Zhang.Sex = '椿';
            Zhang.CHLSS();//输出结果;;我叫张三,我今年0岁了,我是男生,我会吃喝拉撒睡

在外面尽量使用属性来访问字段。

posted @   青仙  阅读(380)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示