第 10 章 属性

第 10 章 属性

本章内容:

CLR 支持两种属性;无参属性有参属性

10.1 无参属性

将属性想象成智能字段,即背后有额外逻辑的字段。CLR 支持静态、实例、抽象和虚属性。外,属性可用任意“可访问性”修饰符来标记

10.1.1 自动实现的属性

如果只是为了封装一个支持字段而创建属性,C#还提供了一种更简洁的语法,称为自动实现的属性(Automatically Implemented Property,后文简称为 AIP)
如:

1
2
// 自动实现的属性
public String Name { get; set; }

如果使用 AIP,属性必然是可读和可写的。

10.1.2 合理定义属性

10.1.3 对象和集合初始化器

C# 语言支持一种特殊的对象初始化语法。下面是一个例子:

1
Employee e = new Employee() { Name = "Jeff", Age = 45; }

这一行代码等价于以下几行代码。

1
2
3
Employee e = new Employee();
e.Name = "Jeff";
e.Age = 45;

如果属性的类型实现了 IEnumerableIEnumerable<T> 接口,属性就被认为是集合,而集合的初始化是一种相加(additive)操作

10.1.4 匿名类型

利用 C# 的匿名类型功能,可以用很简洁的语法来自动声明不可变(immutable)的元组类型。

1
2
3
4
5
// 定义类型,构造实例,并初始化属性
var o1 = new { Name = "Jeff", Year = 1964 };

// 在控制台上显示属性: Name=Jeff, Year=1964
Console.WriteLine("Name={0}, Year={1}", o1.Name, ol.Year);

10.1.5 System.Tuple类型

10.2 有参属性

C# 允许一个类型定义多个索引器,只要索引器的参数集不同。