基本成员初始化部分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++。有什么想法吗?您可以使用构

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。谢谢你的意见。