属性是否隐式地初始化变量?

时间:2018-10-27 19:07:29

标签: c#

我在PDF教程中找到了以下代码:

public class Chien
{
    public static int NombreDeChiens { get; set; }
    private string prenom;

    public Chien(string prenomDuChien)
    {
        prenom = prenomDuChien;
        NombreDeChiens++;
    }

    public void Aboyer()
    {
        Console.WriteLine("Wouaf ! Je suis " + prenom);
    }
}

尽管constructor中有此增量,但是此代码中没有初始化。那怎么可能呢?

1 个答案:

答案 0 :(得分:4)

属性不过是用get和set方法包装的字段。由于字段 do 具有初始值,属性也是如此。

例如以下代码:

public int MyProperty { get; set; }

由编译器翻译成如下形式:

private int _myProperty;   // the actual name of the field defers and is only known by the compiler
public int get_MyProperty() { return this._myProperty; }
public void set_MyProperty(int value) { this._myProperty = value; }

因此问题归结为“具有个字段一个默认值”?这个问题的答案是肯定的,他们这样做:null用于引用类型,所有结构的默认值,例如0代表int,{{1}代表0f