zoukankan      html  css  js  c++  java
  • 读<<CLR via C#>>总结(8) 属性

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

    一,定义属性

      代码如下:

    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方法。

  • 相关阅读:
    Net中应用 Redis 扩展类
    【ASP.Net MVC3 】使用Unity 实现依赖注入
    NET平台常用的框架整理
    ABP 基于DDD的.NET开发框架 学习(三)创建模块:任务管理
    ABP 基于DDD的.NET开发框架 学习(二)创建实体
    ABP 基于DDD的.NET开发框架 学习(一)
    生成二维码图片
    淘宝图片指纹匹配功能c#实现
    webAPI中“System.Web.Http.HttpConfiguration”不包含“EnableSystemDiagnosticsTracing”的定义解决办法
    NuGet包 安装相关指令
  • 原文地址:https://www.cnblogs.com/mcgrady/p/2545262.html
Copyright © 2011-2022 走看看