我想知道人们在C#中使用属性作为对象初始化器的想法.由于某种原因,它似乎打破了构造函数的基本原理.
一个例子...
public class Person
{
string firstName;
string lastName;
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
public string LastName
{
get { return lastName; }
set { lastName= value; }
}
}
Run Code Online (Sandbox Code Playgroud)
然后用.....做对象初始化
Person p = new Person{ FirstName = "Joe", LastName = "Smith" };
Person p = new Person{ FirstName = "Joe" };
Run Code Online (Sandbox Code Playgroud)
Jor*_*ira 10
你在这里看到的是编译器提供的一些合成糖.在引擎盖下它真正做的是:
Person p = new Person(FirstName ="Joe",LastName ="Smith");
Person _p$1 = new Person();
_p$1.FirstName = "Joe";
_p$1.LastName = "Smith";
Person p = _p$1;
Run Code Online (Sandbox Code Playgroud)
所以恕我直言,你并没有真正打破任何构造函数基础,但使用一个很好的语言工件,以便于可读性和可维护性.
对象初始值设定器绝不会替换构造函数.构造函数定义了您必须遵守的合同,以便创建类的实例.
C#语言中对象初始化器的主要动机是支持匿名类型.
var v = new { Foo = 1, Bar = "Hi" };
Console.WriteLine(v.Bar);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
440 次 |
| 最近记录: |