假设我们有这样一个类(非常基本的例子)
public class Foo
{
public int A { get; set; }
public string AString { get; set; }
}
我们使用对象初始值设定项对它进行初始化,如下所示:
Foo foo = new Foo
{
A = 42,
AString = 42.ToString()
}
存在冗余,因为我必须访问两次类型相同的对象(42)。 为什么无法在初始值设定项中访问对象(或其先前设置的属性),例如通过写作
Foo foo = new Foo
{
A = 42,
AString = foo.A.ToString()
}
或者为什么没有与this
类似的关键字,以便我们可以这样写:
Foo foo = new Foo
{
A = 42,
AString = self.A.ToString()
^^^^
}
此外,因为写
是完全合法的Foo foo = new Foo();
foo.A = 42;
foo.AString = foo.A.ToString();
在我看来,能够编写类似于对象初始化程序中的代码也是相当不错的。
修改
我知道构造函数和属性设置器可以用来设置传递属性,但这不是关于如何在实践中这样做,而是关于为什么不支持this
的原因。