zoukankan      html  css  js  c++  java
  • 第十章 属性

    1. 概述

      本章讨论类型中的各种属性。

    2. 名词解释

      ① 属性:属性允许源代码用一个简化的语法来调用一个方法。

      ② 访问器方法:封装了字段访问的方法通常称为 访问器方法。

      ③ 自动实现属性(Automatically Implemented Property, AIP): C#提供的一种更简单的语法,用于 只是为了封装一个支持字段而创建一个属性的情况。

      ④ 内联(inline): 内联是将一个方法的代码直接编译到调用它的方法中。

    3. 主要内容

      3.1 无参属性

        定义了get/set访问器以后,编译器会生成相应的get/set方法(以get_或set_为前缀)

        3.1.1 自动实现的属性(AIP)

          有以下弊端:

          ① 必须在每个构造器方法中显式初始化每个AIP。

          ② 在任何想要序列化或反序列化的类型中,都不要使用AIP功能。因为自动生成的名称会在每次编译时变化。

          ③ 调试时不能在AIP上设置断点。

        3.1.2 合理定义属性

          属性本质上就是一个方法,但是被用作字段的方式。以下是属性的弊端:

          ① 属性可以是只读或只写的,字段访问总是可读和可写的。如果定义属性,最好同时提供get和set访问器方法。

          ② 属性不能作为out或ref参数传递给方法。

          ③ 属性可能花费较长时间执行。如果需要线程同步,就不要使用属性。

          ④ 如果连续多次调用,属性每次都可能返回一个不同的值。

          ⑤ 属性可能造成明显的side effect。

          ⑥ 属性可能需要额外的内存,或者返回一个不正确的引用,指向不属于对象状态一部分的某个东西。

          最后,建议老老实实的实现GetXxx和SetXxx方法,来代替属性。

        3.1.3 对象和集合初始化器

        3.1.4 匿名类型

    var o1 = new { Name = "Jeff", Year = 1963};

        3.1.5 System.Tuple类型

      3.2 有参属性

        C#用数组风格的语法来公开有参属性(索引器)。可将索引器看做C#开发人员重载[]操作符的一种方式。

      3.3 调用属性访问器方法时的性能

        对于简单的get/set访问器方法,JIT编译器会将代码内联。这样就不会有性能损失了。

      3.4 属性访问器的可访问性

        定义一个属性时,如果两个访问器方法需要具有不同的可访问性,C#语法要求必须为属性本身指定限制最不大的那种,然后,在两个访问器中,只能选择一个来应用限制较大的那一种可访问性。

    public String Name
    {
            get { return m_name; }
            protected set { m_name = value; }
    }

      3.5 泛型属性访问器方法

        C#不允许属性访问器具有泛型参数。

    4. 总结

      

  • 相关阅读:
    Mysql 导入CSV数据 语句 导入时出现乱码的解决方案
    有用的 Mongo命令行 db.currentOp() db.collection.find().explain()
    MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 解决方法 -摘自网络
    MongoDB索引相关文章-摘自网络
    批量更新MongoDB的列。
    RabbitMQ 消费端 Client CPU 100%的解决办法
    php根据命令行参数生成配置文件
    php解释命令行的参数
    使用memcache对wordpress优化,提速
    python基础技巧综合训练题2
  • 原文地址:https://www.cnblogs.com/stone_lv/p/4309021.html
Copyright © 2011-2022 走看看