为什么不能用c#object initializer语法调用方法?
在我看来,属性设置器按照它们在语法中设置的顺序被调用,那么为什么不允许调用方法呢?如果有充分的理由,我就错过了.
我意识到方法和属性之间的语义差异以及技术上的相似之处.这个问题的目的是探究一个很好的技术原因,即它们不包括该功能.
这个.__curious_geek,我听到你在说什么,但我确信他们没有包含一些功能,因为它在技术上不可行.
这就是我所追求的一切.听到的压倒性的不受欢迎的声音响亮而清晰.Stackoverflow不再是"问答网站",而是"保护您的问题网站".
样品用法:
var mySuperLongVariableNameThatIDontWantToTypeOverAndOverAgainAndIsntThatTheWholePointAnyway = new Thingy
{
Name = "Marty McFly",
AddChildren("Biff","Big Bird","Alf"),
// 1000 other properties and method calls.....
}
Run Code Online (Sandbox Code Playgroud)
答案在于名称 - 对象初始化器语法是语法糖,可以直观地对对象的初始状态进行分组.方法更改对象状态,因此一旦更改,它就不再是初始状态.
例如:说你买车.它是一辆红色轿跑车,上面有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
Run Code Online (Sandbox Code Playgroud)
在这个有点人为的例子中,该方法具有副作用,因此将对象从其初始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
}
}
Run Code Online (Sandbox Code Playgroud)
然后这样称呼它!
var fail = new C { BadProperty = 1 };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5369 次 |
| 最近记录: |