2016-03-26 195 views
1

當默認構造函數被省略時,類型的數據成員如何獲得它們的默認值,並且它們是否被賦予默認值?無論如何,默認構造函數首先使用什麼?沒有默認構造函數的默認值

class Program 
{ 
    static void Main(string[] args) 
    { 
     Person person = new Person("SomeName"); 
     Console.WriteLine(person.Age); 
     Console.WriteLine(person.FamileName == null); 
    } 
} 

class Person 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public string FamileName { get; set; } 

    public Person(string name) 
    { 
     Name = name; 
    } 
} 

編輯: 這是一本書,我一直在讀,它是什麼讓我思考的是,默認的構造函數是負責給數據成員的默認值,但似乎我聽錯了,它的如果我需要修改這些值,這只是一種方法,如果我錯了,請糾正我。

每個C#類都提供了一個「freebie」默認構造函數,您可以根據需要重新定義它。根據定義, 默認構造函數從不接受參數。分配新的對象到內存中後,默認的構造函數 保證類的所有字段數據設置爲適當的默認值

+0

@EʜsᴀɴSᴀᴊᴊᴀᴅ0不是'最小值int'。 – Eser

回答

0

對象字段總是用缺省值初始化,如果你不指定使用不同的構造或字段初始化(屬性也一樣)。

默認值commony對應於所有設置爲0的位(對於引用類型爲null,對於數字類型爲0)。

可以使用構造函數設置其他值:

public Person() 
{ 
    Name = "Sebastian"; 
} 

或初始化:

public string Name { get; set; } = "Sebastian"; 
0

在C#中,你可以指定默認值。

class Person 
{ 
    public string Name { get; set; } ="Someone"; 
    public int Age { get; set; } 
    public string FamileName { get; set; } 
} 

如果你想在對象的初始化,你可以做到這一點分配值:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Person person = new Person { Name= "SomeOne"; Age=16; }; 
     Console.WriteLine(person.Age); 
     Console.WriteLine(person.FamileName == null); 
    } 
} 

如果你只需要指定值或默認值,不需要構造。你可以在上面提到的方法中做到這一點。 當我需要做一些額外的工作時,我通常使用構造函數,例如數據庫連接,設置其他物體等

鏈接:https://msdn.microsoft.com/en-us/library/bb397680.aspx

0

在你的類成員將其默認值進行初始化。對於參考類型,這是null和值類型,它是默認值。有沒有什麼特別的是成員的對象 - 這是相同的值,如果他們在一個函數中他們將有:

public void Foo() 
{ 
    string name; // null 
    int age; // 0 
    bool isChild; // false 
} 

至於默認的構造函數,這是一個不錯的地方,以確保您的數據類型是安全的。例如,您可能要初始化任何引用類型的性質在一個非空值:

class Widget 
{ 
    public string Name { get; set; } 
    public Widget() 
    { 
     Name = string.Empty; // this way someone can call Widget.Name safely 
    } 
} 

在一個相關的說明,您也應該看到:How do you give a C# Auto-Property a default value?