2016-11-03 55 views
1

我是C#語言的新手,在網站上遇到過這種聲明。我之前沒看過這種類型的構造函數(?),所以我很困惑:這是一個構造函數聲明嗎?

public class Employee { 

    public string Name { get; set; } 
    public string Title { get; set; } 

    public static Employee GetEmployee() {   //Constructor? Method? 
    var emp = new Employee() { 
     Name = "Somebody", Title = "Developer" 
    }; 
    return emp;         //Returns to a method? 

非常感謝。

+2

它不是一個構造函數。只是一個靜態方法 –

+3

如果您對設計模式感興趣,另一個名稱是'factory method' – Jehof

回答

4
//Constructor? Method? 

方法。一種靜態方法。

該圖案結合通常用於與私人構造:

public static Employee GetEmployee() 
{ 
    return new Employee() 
    { 
     Name = "Somebody", Title = "Developer" 
    }; 
} 

private Employee() { } 

的私有構造函數確保了類的實例可以可以通過使用的靜態方法之一創建。

這樣的「工廠方法」比一個構造更靈活的:

  • 它可以返回一個子類(通常與私人,內子類中使用)的一個實例,
  • 它有一個名稱,它可以提高可讀性,並允許您使用相同參數列表但不同名稱的多種工廠方法(如GetDeveloper()GetManager())。

但是,它也有一個缺點:您只能在構造函數中設置readonly字段。因此,如果Employee是具有隻讀字段的不可變類,則在使用此模式時,您需要將所有值傳遞給私有構造函數。

0

你在代碼片中看到的是一個簡單的靜態函數,它創建對象的一個​​實例,儘管它是完整的,但應該隱藏這個abbilty來創建一個Employee對象,構造函數的默認behavor是如果一個類不包含任何實例構造函數聲明爲public

,將自動提供一個默認的 實例構造。構造函數的默認構造函數只是調用基類的直接參數構造函數 。

MSDN

1

這不是一個構造函數,但只是一個普通的靜態方法。

public class Employee 
{ 
    //Default constructor 
    public Employee() 
    { 
     Name = "Some other name"; 
     Title = "Some other title"; 
    } 

    //Static constructor 
    static Employee() 
    { 

    } 

    //Just a static method returning an Employee object 
    public static Employee GetEmployee() 
    {  
     //Object initializer using the default constructor 
     var emp = new Employee() 
     { 
      Name = "Somebody", 
      Title = "Developer" 
     }; 
     return emp; 
    } 

    public string Name { get; set; } 
    public string Title { get; set; } 
} 
1

我猜你在問關於對象初始值設定項。它不是一個構造函數,但靜態方法調用默認構造函數,然後使用對象初始值設定語法在新對象上設置兩個屬性。

如果您不得不命名該方法,您可以將其稱爲工廠方法。沒有什麼特別的方法,它只是一個返回一個新的對象實例的靜態方法。它恰巧實現了一種稱爲工廠模式的通用軟件模式。

工廠模式有幾種常見用途。我最近想到的一個例子是有時候我想創建一個新的對象實例,有時候我想返回一個現有的實例。工廠模式以對調用者透明的方式支持。另一個常見用途是調用者不知道正在創建的特定類型 - 調用者可能只需要對接口或基類的引用,並且工廠決定要實例化的特定類。

相關問題