[英]Should a c# class generate instances of itself?
我有一個定義CallRate類型的類。 我需要通過從文件中讀取數據來添加創建類的多個實例的功能。
我在類CallRate中添加了一個靜態方法,該方法返回List<CallRate>
。 類可以通過調用其自己的構造函數之一來生成自身的新實例嗎? 它有效,我只是想知道這是否是正確的選擇。
List<CallRates> cr = CallRates.ProcessCallsFile(file);
從靜態方法中獲得自己的對象是完全可以的。
例如
一個點網庫的功能與您相同,
XmlReadrer reader = XmlReader.Create(filepathString);
當然可以,在某些情況下甚至可以鼓勵。 有幾種設計模式可以處理對象創建 ,其中一些可以滿足您的描述。
當我需要檢查參數的有效性時,我經常使用這種模式。 強烈建議不要從構造函數中引發異常。 從工廠方法來看還不錯,或者您可以選擇返回null。
對我來說似乎很好。 在其他語言中,您可能會編寫一個函數,但是在C#這樣的語言中,靜態方法將扮演該角色。
沒關系。 您剛剛創建的內容就像一個簡單的工廠方法。 您有一個靜態方法來創建類型的有效實例。 實際上,您的方法甚至不必是靜態的,並且您仍然具有有效的代碼。 有一個設計模式(原型),可以從現有對象創建一個新的有效對象。 有關詳細信息,請參見http://www.dofactory.com/Patterns/PatternPrototype.aspx 。
工廠方法通常是一個好的設計。 當我用C#編寫它們時,我將它們稱為“新建”,因此:
new MyClass()
變成
MyClass.New()
瑣碎地是這樣實現的:
class MyClass
{
public static MyClass New()
{
return new MyClass();
}
}
通常,當存在關於是否要實際創建類或僅返回null
或是否返回MyClass
或派生自其的某些其他條件時,我會這樣做。
有時我會使用公共靜態方法來替代構造函數重載。
尤其是在僅依靠參數類型來指示打算使用哪種對象構造的情況下,這種情況尤為明顯。
我喜歡上面提到的很多次讓靜態方法返回實例。
@Paul:別忘了在上面的評論中打勾,您會發現這是最佳答案。
就像指出“通過調用自己的構造函數之一來生成自身的新實例”
它不是來自構造函數,而是來自靜態方法。
我通常在需要即時實現類時使用它。 例如
public class Car
{
public static Car RedExpensiveCar = new Car("Red", 250000);
public Car()
{
}
public Car(string color, int price)
{
Color = color;
Price = price;
}
public string Color { get; set; }
public int Price { get; set; }
}
這樣,我就無需在代碼中記住或編寫構造函數參數。
Car car = Car.RedExpensiveCar;
這樣做是完全可以接受的。 當我這樣做時,我通常將類的實際構造函數設為私有,這樣很明顯構造實例的唯一方法是通過靜態方法。
這在“構造”可能不總是返回新實例的情況下非常有用。 例如,您可能想要返回以前緩存的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.