2009-02-03 99 views
5

几个月前,我阅读了一种技术,以便如果您传入的参数匹配了局部变量,那么您可以使用一些简短的语法来设置它们。为了避免这种情况:C#对象构造函数 - 速记属性语法

public string Method(p1, p2, p3) 
{ 
    this.p1 = p1; 
    this.p2 = p2; 
    this.p3 = p3; 
} 

任何想法?

回答

25

您可能正在考虑C#3.0中的新对象初始值设定器语法。它看起来像这样:

var foo = new Foo { Bar = 1, Fizz = "hello" }; 

所以这是给我们的Foo的一个新实例,与“酒吧”属性初始化为1,且“嘶嘶声”属性设置为“你好”。

这种语法的诀窍是,如果你省略“=”并提供一个标识符,它会假定你正在分配一个同名的属性。因此,例如,如果我已经有一个Foo实例,我可以这样做:

var foo2 = new Foo { foo1.Bar, foo1.Fizz }; 

然后,这样就变得非常接近您的示例。如果你的类有P1,P2和P3属性,也具有相同的名称的变量,你可以写:

var foo = new Foo { p1, p2, p3 }; 

注意,这仅仅是为了构建实例 - 不传递参数到方法,为您的例子显示 - 所以它可能不是你想到的。

2

您可能会想到C#中的“对象初始值设定项”,您可以通过设置类的属性来构造一个对象,而不是使用参数化的构造函数。

我不确定它是否可用于您已经构建“this”的示例中。

+0

Java中有类似的东西吗? – Verhogen 2009-10-15 18:26:28

+1

据我所知不是。 – 2009-10-16 14:47:58