我搜索了很多,但沒有一個答案是清晰的(至少對我來說!)。現在我正在把這個問題放在SO裏,因爲我相信我無法在其他地方得到更清晰的答案。.Net中的Private vs Static構造函數
什麼時候應該在我的課程中使用私有/靜態構造函數?
我厭倦了常見的答案,所以請幫助我一些實時示例和使用這些構造函數的優點/缺點。
我搜索了很多,但沒有一個答案是清晰的(至少對我來說!)。現在我正在把這個問題放在SO裏,因爲我相信我無法在其他地方得到更清晰的答案。.Net中的Private vs Static構造函數
什麼時候應該在我的課程中使用私有/靜態構造函數?
我厭倦了常見的答案,所以請幫助我一些實時示例和使用這些構造函數的優點/缺點。
靜態構造函數:用於初始化靜態成員。
私有構造函數:當您只希望在自己的代碼中實例化一個類時(通常是靜態方法)時使用。例如:
public class Thing
{
static int Number;
static Thing()
{
Number = 42; // This will only be called once, no matter how many instances of the class are created
}
// This method is the only means for external code to get a new Thing
public static Thing GetNewThing()
{
return new Thing();
}
// This constructor can only be called from within the class.
private Thing()
{
}
}
構造用於並初始化類的靜態成員和創建的類的第一個實例或靜態成員是第一次訪問時被調用。如果你有構造函數的重載
私有構造被使用,其中一些只能由其他構造
我應該什麼時候在我的課堂上使用私有構造函數中使用?
當你想要一個構造函數,但不想將它暴露給世界。這可能是因爲您有一個調用構造函數的工廠方法(在驗證之後),或者因爲構造函數是通過鏈接調用的(即public Foo(string) : this() { ...}
)。
此外,請注意,反射代碼通常能夠使用私有構造函數 - 例如序列化或ORM庫。另外,在早期的C#編譯器中,當你正在編寫現在是static
類的時候 - 有一個私有構造函數是使它看起來不可取的唯一方法。
什麼時候應該在我的類中使用靜態構造函數?
當您需要在實例或靜態方法訪問該狀態之前初始化某個靜態狀態時。
私人構造函數 - 如果您不希望您的對象可以從當前類的外部構造。靜態構造函數 - 如果你需要初始化靜態類的狀態。 – zerkms