为什么不能使用c#object initializer语法调用方法?
在我看来,属性设置器按照它们在语法中设置的顺序被调用,那么为什么不允许调用方法呢?如果有充分的理由,我就错过了。
编辑
我意识到方法和属性之间的语义差异以及技术上的相似之处。这个问题的目的是探究一个很好的技术原因,即它们不包括该功能。
这个。 __curious_geek,我听到你在说什么,但我确信他们没有包含一些功能,因为它在技术上不可行。
这就是我所追求的一切。听到的压倒性的不受欢迎的声音响亮而清晰。 Stackoverflow不再是“问答网站”,而是“保护您的问题网站”。
编辑2
样品用法:
var mySuperLongVariableNameThatIDontWantToTypeOverAndOverAgainAndIsntThatTheWholePointAnyway = new Thingy
{
Name = "Marty McFly",
AddChildren("Biff","Big Bird","Alf"),
// 1000 other properties and method calls.....
}
答案在于名称 - 对象 初始化 语法是语法糖,可以直观地分组对象的初始状态。方法改变对象状态,所以一旦改变,它就不再是了 初始 州。
例如:说你买车。这是一辆红色轿跑车,上面有55,000英里。然后,你决定开车。它最终有55,500英里。它已经从最初的状态改变了:
var c = new Car() {Color = "Red",
Style = Styles.Coupe,
Mileage = 55000};
// c.Mileage is 55,000
c.Drive();
// c.Mileage is 55,500
在这个有点人为的例子中,该方法有一个 副作用 从而将对象从其最初的55,000mi状态更改为55,500mi状态。这与购买55,500英里的汽车不同。
如果你 真 想要这样做,你可以作弊我想...
class C {
int BadProperty {
set {
SomeMethod(value);
}
}
void SomeMethod(int value) {
// here is where you do really, really bad things
}
}
然后这样称呼它!
var fail = new C { BadProperty = 1 };
如果方法失败怎么办?基本的想法是,它只是一个语法糖。 Eric Lippert很多时候被问到“为什么C#不支持X功能?”。他的答案总是如此
“因为没人设计,指定,
实施,测试,记录和
发布了这个功能。“ - Eric Lippert。
这就是全部 命令,必须先使用所有字段和所有声明的方法初始化Class,然后才能保证安全地运行方法。
您可以使用命名参数调用方法,如果这是您要问的:
someMethod(param1: "Hello World", param2: "Some Other Value");