基本成员初始化部分C#?
C#中是否存在基本成员初始化节?我尝试了一次又一次地搜索,但不断地提出有关初始化的问题。我所指的初始化列表与下面的示例类似 这样做的一个原因是初始化类中的常量。我主要是想弄清楚我是否能做到以下几点:基本成员初始化部分C#?,c#,object,initialization,initialization-list,C#,Object,Initialization,Initialization List,C#中是否存在基本成员初始化节?我尝试了一次又一次地搜索,但不断地提出有关初始化的问题。我所指的初始化列表与下面的示例类似 这样做的一个原因是初始化类中的常量。我主要是想弄清楚我是否能做到以下几点: public class A{ private const string _name; public A(string name): _name(name){ //stuff } } 再次,我试着用C语言来做这件事,而不是C++。有什么想法吗?您可以使用构
public class A{
private const string _name;
public A(string name): _name(name){
//stuff
}
}
再次,我试着用C语言来做这件事,而不是C++。有什么想法吗?
您可以使用构造函数中初始化的私有只读字段执行此操作,因此:public class A
{
private readonly string _name;
public A (string name)
{
_name = name;
}
}
readonly
字段只能在内联或构造函数中初始化,此后保持不变。您可以使用构造函数中初始化的私有只读字段来执行此操作,因此:
public class A
{
private readonly string _name;
public A (string name)
{
_name = name;
}
}
<> >代码> Read Ong/Cux>字段只能初始化为内联或构造函数,然后是常数。< P>不,C在构造函数体之前不支持成员初始化,与C++相同。可以在声明字段时初始化字段,也可以在构造函数体中使用普通赋值
在该位置只能使用2个方法-调用基类的构造函数和调用同一类中的另一个构造函数。您可以查看C#规范(即第17.10节实例构造函数)以了解详细信息:
constructor-declaration:
attributesopt constructor-modifiersopt constructor-declarator constructor-body
constructor-declarator:
identifier ( formal-parameter-listopt ) constructor-initializer
constructor-initializer:
: base ( argument-listopt )
: this ( argument-listopt )
<>不,C++不支持构造函数体之前的成员初始化,与C++相同。可以在声明字段时初始化字段,也可以在构造函数体中使用普通赋值
在该位置只能使用2个方法-调用基类的构造函数和调用同一类中的另一个构造函数。您可以查看C#规范(即第17.10节实例构造函数)以了解详细信息:
constructor-declaration:
attributesopt constructor-modifiersopt constructor-declarator constructor-body
constructor-declarator:
identifier ( formal-parameter-listopt ) constructor-initializer
constructor-initializer:
: base ( argument-listopt )
: this ( argument-listopt )
除此之外,
const
必须在编译时定义readonly
的工作原理类似于const,但它必须在构造函数中填充,然后不能在之后更改(实际上是一个常量)。+1。使用readonly
(这很可能是OP想要的)很好。这也适用于属性还是仅适用于字段?另外,如果你不使用C++中的初始化列表,你就不能有效地调用两个函数吗?例如,如果我们没有使用一个字符串,而是使用了一个Foo,那么您将调用默认的Foo构造函数,然后使用赋值运算符使其有点不足?@thedoctor,将不会调用Foo
的构造函数-它将在对象分配时初始化为null(对于class
)/默认值(对于struct
)。所以调用构造函数不会带来额外的开销。谢谢。我读了之后才发现这一点。甚至不知道c#has structs。感谢您的输入。除了此之外,const
必须在编译时定义readonly
的工作原理类似于const,但它必须在构造函数中填充,然后不能在之后更改(实际上是一个常量)。+1。使用readonly
(这很可能是OP想要的)很好。这也适用于属性还是仅适用于字段?另外,如果你不使用C++中的初始化列表,你就不能有效地调用两个函数吗?就像我们没有字符串一样,我们有一个Foo,所以您将调用默认Foo构造函数,然后赋值操作符使其有点不足?@thed0ctor,将不会调用Foo
-它将在对象分配时初始化为null(对于class
)/default值(对于struct
)。所以调用构造函数不会带来额外的开销。谢谢。我读了之后才发现这一点。甚至不知道c#has structs。谢谢你的意见。