当前位置: 首页 > 编程语言 > C# > 正文

C#3.0新特性(二)-初始值设定项

时间:2010-07-27 博客园 山高月大

写在前边:

做事不坚持,是我这么多年来最失败的地方,从今天开始改正,没有人也没有动力督促,只能靠自己的决心和行动,来证明...。今天来学学自动属性,初始值设定项,或叫初始化器。本人知道,这样的内容在网上早有了,不知能不能放首页。再放一次,听听前辈同仁们的意见。

一、自动属性:

在C# 2.0中,我们对成员进行封装,也就是自动属性,如下示例:

private int m_one;
public int One
{
  get { return m_one; }
  set { m_one = value; }
}

这种方式只需写第一句代码,然后用Visual Studio的Refactor->Encapsulate Field功能,很方便,也早已经为大家熟知。而在C# 3.0中,我们只需要写成如下一句就可以了:

public int Dne { get; set; }// Auto-implemented properties

可以看出,C# 3.0中这种自动属性对C# 2.0中的属性写法作了大大的简化。C# 3.0的自动属性就不需要创建私有变量,而把这个工作交给编译器代劳!当然,如果需要在获取访问器get或设置访问器set里头添加一些逻辑,扩展也很方便。

二、对象初始值设定项

使用对象初始值设定项可以在创建对象时向对象的任何可访问的字段或属性分配值,而无需显式调用构造函数。对象初始值设定项,我在很多地方看到,其名称,又叫对象初始化器。看实例,以前,我们首先定义一个类:

public class MyClass
{
  public string Number { get; set; }
  public string Name { get; set; }
  public MyClass()
  {
  }
  public MyClass(string newID)
  {
    Number = newID;
  }
  public MyClass(string newID, string newName)
  {
    Number = newID;
    Name = newName;
  }
}

然后,new一个对象,并对其属性初始化:

public static void newObject()
{
  MyClass cobject = new MyClass();
  cobject.Name = "yy";
  cobject.Number = "1111";
  MyClass dobject = new MyClass("1111");
  dobject.Name = "yy";
  MyClass eobject = new MyClass("1111","yy");
}

现在,在C# 3.0中,利用对象初始化器,new一个对象,并对可以访问的属性初始化,只需要如下一句代码:

MyClass nobject = new MyClass{Name = "yy",Number = "1111"};