博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读<<CLR via C#>>总结(8) 属性
阅读量:6328 次
发布时间:2019-06-22

本文共 1876 字,大约阅读时间需要 6 分钟。

  属性看起来像字段,但本质上是方法。使用属性保持了较好的数据封装,它使类型的数据字段不会被公开,从而确保了对象的状态永远不被破坏。

一,定义属性

  代码如下:

public sealed class Employee    {        //私有字段(支持字段)        private string name;        private int age;        public string Name        {            get//get访问器            {                return name;            }            set//set访问器            {                name = value;//value为隐藏字段,总是代表新值            }        }        public int Age        {            get            {                return age;            }            set            {                //set访问器中可以加入判断逻辑                if (value < 0 || value > 100)                {                    throw new ArgumentOutOfRangeException("value", value.ToString(), "The value must be between 0 and 100!");                }                age = value;            }        }    }

二,调用属性

  代码如下:

class Program    {        static void Main(string[] args)        {            Employee e = new Employee();            e.Name = "Mcgrady";//set员工姓名            string employeeName = e.Name;//get员工姓名            Console.WriteLine(employeeName);//显示"Mcgrady"            e.Age = 32;//set员工年龄            e.Age = -5;//抛出ArgumentOutOfRangeException异常            int employeeAge = e.Age;//get员工年龄            Console.WriteLine(employeeAge);//显示"32"        }    }

总结:1,可以将属性想象成智能字段,即背后有额外逻辑的字段。

   2,每个属性都有一个名称和一个类型,并且类型不能是void,而且属性不能重载。
   3,可以定义只读属性或只写属性。省略set方法表示定义一个只读属性,而省略get方法表示定义一个只写属性。
   4,编译器在你指定的属性名之前附加get_或set_前缀,从而自动生成这些方法的名字。
   5,除了生成访问器方法,针对源代码中定义的每一个属性,编译器还会在托管程序集(dll)的元数据中生成一个属性定义项。

三,自动属性AIP

  自动属性AIP(Automatically Implemented Property),它是定义属性的一种更简洁的方式。例如上面例子中的属性可以使用自动属性定义为:

public sealed class Employee    {        //自动属性        public string Name { get; set; }        public int Age { get; set; }    }

  当然它的调用方法和运行结果与普通属性没有什么区别。不过需要注意的地方是:

  1,AIP的get和set方法上不能添加断点,所以不利于调试查错。

  2,AIP属性必须同时是可读和可写的,也就是说编译器必然会同时生成get和set方法。

转载地址:http://lkwoa.baihongyu.com/

你可能感兴趣的文章
第六周学习总结
查看>>
20个数据库设计的最佳实践
查看>>
C# async
查看>>
C语言博客作业02--循环结构
查看>>
图片时钟
查看>>
Unity-2017.3官方实例教程Space-Shooter(一)
查看>>
makefile中重载与取消隐藏规则示例
查看>>
Linux 内核版本号查看
查看>>
4-3 简单求和 (10分)
查看>>
Python环境部署
查看>>
[BZOJ1927]星际竞速(费用流)
查看>>
PowerDesigner添加表注释
查看>>
使用VMware安装Ubuntu虚拟机,创建后开启显示黑屏的解决方法
查看>>
Java数据结构与算法(11) - ch06递归(二分法查找)
查看>>
文件操作
查看>>
this的指向
查看>>
Object类及其常用方法简介
查看>>
VMware安装CentOS7后无法使用yum
查看>>
如何查看oracle用户具有的权限和角色
查看>>
Hibernate关联关系配置(一对多、一对一和多对多)
查看>>