C# - 实现类属性的这两种方式有什么区别?

Ser*_*gio 12 c#

基本的C#问题在这里.

在声明它时或在相关对象的构造函数中创建类属性/字段的实例有什么区别.例如:

public class MyClass
{
    public MyObject = new MyObject();
}
Run Code Online (Sandbox Code Playgroud)

VS

public class MyClass
{
    public MyObject;

    public MyCLass()
    {
        MyObject = new MyObject();
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 23

调用基本构造函数之前初始化具有初始化程序的字段,而如果初始化程序在主体中,则仅在调用基本构造函数之后执行.

如果基础构造函数调用虚方法,这可能是相关的 - 但我个人试图避免这种情况.

示例代码:

public class Base
{
    public Base()
    {
        Dump();
    }

    public virtual void Dump() {}
}

public class Child : Base
{
    private string x = "Initialized at declaration";
    private string y;

    public Child()
    {
        y = "Initialized in constructor";
    }

    public override void Dump()
    {
        Console.WriteLine(x); // Prints "Initialized at declaration"
        Console.WriteLine(y); // Prints "" as y is still null
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Adeel:这基本上是Reflector,IMO中的一个错误.查看IL(您仍然可以在Reflector中执行),您将看到在赋值顺序和基本构造函数调用方面存在差异. (2认同)