基础成员初始化部分C#?

时间:2012-11-24 05:59:07

标签: c# object initialization initialization-list

C#中是否存在基本成员初始化部分?我尝试搜索和搜索,但不断提出有关初始化List class的问题。我所指的初始化列表看起来就像位于here.

的示例

这样做的一个原因是初始化类中的常量。我基本上想弄清楚我是否可以做到以下几点:

public class A{
    private const string _name;
    public A(string name): _name(name){
         //stuff
    }
}

同样,我试图用C#而不是C ++来做这件事。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您可以使用构造函数中初始化的私有只读字段来执行此操作,因此:

public class A 
{
    private readonly string _name;

    public A (string name)
    {
        _name = name;
    }
}

readonly字段只能在内联或构造函数中初始化,然后保持不变。

答案 1 :(得分:2)

不,C#在构造函数体之前不支持成员初始化,就像C ++一样。您可以在声明字段时初始化字段,也可以在构造函数体内使用正常赋值。

在该位置只能使用2个方法 - 调用基类的构造函数并调用同一个类中的另一个构造函数。您可以查看C#规范(即http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf,第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 )