为什么不能用c#object initializer语法调用方法?

Ron*_*rby 16 .net c#

为什么不能用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.....
    }
Run Code Online (Sandbox Code Playgroud)

Nic*_*win 9

答案在于名称 - 对象初始化器语法是语法糖,可以直观地对对象的初始状态进行分组.方法更改对象状态,因此一旦更改,它就不再是初始状态.

例如:说你买车.它是一辆红色轿跑车,上面有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英里的汽车不同.

  • 财产制定者也能够改变国家. (2认同)

Yuc*_*uck 6

如果你真的想这样做,你可以欺骗我想...

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)