在c#中使用这两种方式初始化对象之间的区别
通常我用这种方式将object
添加到list
时即时initialize
object
—>
list.add( new foo() { // <--- foo() field1 = value1, field2 = value2 } );
但是一旦我尝试了—>
list.add( new foo { // <--- foo field1 = value1, field2 = value2 } );
& 有效 !!!
在第二种方式我只是creating
一个object
而不使用它的尾部。 那么有没有人知道这些初始化对象的各种方法之间的区别?
那么有没有人知道这些初始化对象的各种方法之间的区别?
完全没有区别。 在这两种情况下,您都在使用对象初始值设定项 ,如果您没有指定任何构造函数参数,那么这与提供构造函数参数的空列表完全等效。 从C#规范的7.6.10.1节:
对象创建表达式可以省略构造函数参数列表并括起括号,前提是它包含对象初始值设定项或集合初始值设定项。 省略构造函数参数列表并括起括号等效于指定空参数列表。
请注意,当您在不使用对象初始值设定项(大括号)的情况下调用构造函数时, 必须指定构造函数参数。 所以:
Foo foo = new Foo(); // Valid Foo foo = new Foo; // Invalid Foo foo = new Foo() {}; // Valid Foo foo = new Foo {}; // Valid
“有效”行都是完全等效的,包括任何默认参数的使用 – 所以Foo
可能只有这样的构造函数:
// You can invoke this without specifying arguments public Foo(int x = 0) { }
有关详细信息,请参阅C#5规范的7.6.10节。
它们都是对象初始化器。 没有区别。 这是一个很好的问题。 我认为在幕后结果是相同的….编译器使用空构造函数创建对象并设置属性。
没有任何区别。 在第二种forms的对象初始值设定项 (无括号)中,默认情况下使用无参数构造函数,但可以显式指定。 如果要将参数传递给构造函数,则必须使用第一个表单(显然有一些值)。
正如大多数人解释的那样,两者都没有区别。 每当我们创建对象时总是会创建没有任何参数的默认构造函数,它使用默认值(空/ NULL)初始化对象的成员,这意味着将使用您的第二个方法。 但是当我们在对象初始化时传递参数时,必须为匹配的定义定义构造函数,否则会导致语法错误。 如果没有为匹配定义定义构造函数,则没有任何内容可以作为值传递或初始化对象成员。
上述就是C#学习教程:在c#中使用这两种方式初始化对象之间的区别分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1025075.html