第十章 属性

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. 总结

  

时间: 2024-11-25 14:22:11

第十章 属性的相关文章

怀疑:如果方法的返回值类型是引用类型的话,那么返回的就是地址。

缘由: "A property method may require additional memory or return a reference to somethingthat is not actually part of the object's state, so modifying the returned object has noeffect on the original object; querying a field always returns a reference

第十章、epub文件处理 -- 样式处理

第十章.epub文件处理 -- 样式处理 这一章的内容比较简单,因为第九章中集中了篇幅介绍显示的流程,所以把处理样式的流程单独列一章来介绍. 对样式的处理包含两个部分:第一是创建样式,第二是应用样式. 创建样式 创建样式的过程其实就是对样式文件的解析.1.0的版本中是直接去读取程序内置的资源文件style.xml,这个文件的位置是在assets\default内. 我们曾在第二章中介绍过如果通过解析资源文件来获得要显示在进度条上的文字.style.xml文件也是资源文件,所以两者在解析的过程中是

《深入理解Java虚拟机:JVM高级属性与最佳实践》读书笔记(更新中)

第一章:走进Java 概述 Java技术体系 Java发展史 Java虚拟机发展史 1996年 JDK1.0,出现Sun Classic VM HotSpot VM, 它是 Sun JDK 和 OpenJDK 中所带的虚拟机,最初并不是Sun开发 Sun Mobile- Embedded VM/ Meta- Circular VM BEA JRockit/ IBM J9 VM JRockit曾号称世界上最快的java虚拟机,BEA公司发布.J9属于IBM主要扶持的虚拟机 Azul VM/ BEA

WW_TRANS_I18N_LOCALE”与“WW_TRANS_I18N_LOCALE”属性

Struts2 i18n国际化(允许用户自行选择语言)转最近在学习struts2,学习资料是李刚著的<struts2权威指南>,这本书写得非常好,非常有学习价值.我在学习过程中,自己跟着做了些例子.下面就是关于在struts2中允许用户自行选择程序语言的原理和示例: 在很多成熟的商业软件中,可以让用户自由切换语言,当用户进入系统时候,可以出现一个下拉列表框,让用户选择语言,一旦用户选择了自己需要使用的语言环境,整个系统的语言环境将一直是这种语言环境.Struts2也可以允许用户自行选择程序语言

第十章 类、对象与实现

                                                                                      第十章 类.对象与实现   万物都是容器,容器的符号是U:对象就是单个容器的别名.一切皆对象,具有某些相同属性特征的对象归纳成类.对象(Object)是类(Class)的一个实例(Instance):类是对象的模板.如果将对象比作房子,那么类就是房子的蓝图.我们以自然语言去描述世界,而计算机是用各种数据结构去描述世界:数据可以

JavaScript高级程序设计:第二十章

第二十章 一.语法 JSON的语法可以表示以下三种类型的值: (1)简单值 (2)对象 JSON的对象与javascript字面量有一些不同.例如,在javascript中,前面的对象字面量可以写成下面这样: var  object = { “name” : “Nicholas” , “age” : 29 } ; JSON表示上述对象的方式如下: { “name” : “Nicholas” , “age” : 29 } 不同之处:首先,没有声明变量,其次,没有末尾的分号.最后,对象的属性必须加双

第二十章 内存等空间管理类的实现

                   第二十章   内存等空间管理类的实现      空间.时间对我来说,或许永远是一个迷.即使我曾经深入到原子的最深处,即使人类科学家是自欺欺人,即使我了解到的最深层次的部分真理是正确的:那又能怎样?那都是过去式,在那光明与黑暗一体之地.我的灵魂受伤了:我不得不回到电脑这块充满垃圾的地方修心养性. 或许我的论述方法不好,要完全理解本章是有点难度:你要对简单的空间概念需要一定的理解,即使只是论述1D的线性平面空间中的2个基本方法:分配与释放,但也很复杂.要知道LI

ORACLE AUTOMATIC STORAGE MANAGEMENT翻译-第十章ASM内置数据结构(1)

CHAPTER 10 ASM Persistent Data Structures 与传统文件系统和卷管理器一样,ASM存储元数据用来描述和跟踪磁盘组的内容.所有的元数据描述存储在上面的ASM磁盘组的组成和内容,这些元数据使得磁盘组实现了自描述.ASM磁盘组有两类元数据:物理元数据和虚拟元数据.物理元数据位于磁盘上.虚拟元数据存储在ASM文件中,因此与其他ASM文件一样这些元数据均匀分布在磁盘组的磁盘上.RDBMS无法打开ASM读取元数据目录也不能对ASM物理元数据的位置执行读写(I/O)操作.

ORACLE AUTOMATIC STORAGE MANAGEMENT翻译-第十章ASM内置数据结构(3)完

Disk Directory Disk Directory包含了磁盘组中所有的磁盘信息.Disk Directory信息比PST更为详细.磁盘组中的每一块盘都有一个条目以数字为索引.Disk Directory的文件号在每个磁盘组中都是2号(F2). Disk Directory中的字段如下: n  Disk name n  Failure group name n  Disk size n  Disk free space n  Disk creation time Disk Director