在C#中实例化期间将参数传递到大括号中的对象

Jor*_*ork 9 c# parameter-passing

在实例化期间将变量传递给对象时,例如in

SomeObject newObject = new SomeObject() { SomeString = "String goes here" };
Run Code Online (Sandbox Code Playgroud)

变量SomeString是否可以在构造函数中访问,或者之后是否会被赋值?如果我需要在构造函数中使用它,它会工作还是我需要将其作为参数传递使用

new SomeObject("String goes here");
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 13

变量SomeString是否可以在构造函数中访问,还是之后会被赋值?

它将在之后分配.

SomeObject newObject = new SomeObject() { SomeString = "String goes here" };
Run Code Online (Sandbox Code Playgroud)

是大致相当/句法糖:

SomeObject temp = new SomeObject();
temp.SomeString = "String goes here";
SomeObject newObject = temp;
Run Code Online (Sandbox Code Playgroud)

  • @lukas,是的,有一个`temp`.在现实世界中,它不称为"temp",但名称是由C#编译器专门生成的,以避免任何名称冲突.编译器使用临时对象来确保您的引用只能引用正确初始化的对象.因此,例如,在设置所有属性之前,变量不会设置为完全初始化的对象,因此如果抛出异常,即使捕获到异常,构造的对象也会丢失(变量将保持为null或任何值)以前). (4认同)