0
我想維護創建的我的類的所有實例的列表。我認爲我可以通過在構造函數中將「this」添加到靜態列表中來實現。當然,C#不允許我在構造函數中引用'this',因爲它尚未完全構造。這是有道理的,但我試圖找出完成這個最好的方法。如何在c#中的構造函數中創建對象的靜態列表?
class Thing
{ static List<Thing> AllTheThings;
public Thing()
{
AllTheThings.Add(this); // can't reference 'this' here
}
}
我能想到的兩種方法是:
- 讓建設者私人和創建調用構造函數,並增加了新的實例列表中的靜態方法(「MakeNewThing」)。 我擔心沒有公共構造函數的潛在問題,但我不確定它們是什麼。
- 創建一個包含Thing's的shell類('ThingShell')。 ThingShell的構造函數創建一個Thing並將其添加到列表中。 這很混亂,需要ThingShell來代理Thing的所有成員。
我似乎記得大約20年前在C++中做這樣的事情,但不記得細節,也找不到代碼。
任何人有更好的想法?
你發佈的代碼工作正常,除了你永遠不會初始化'AllTheThings'。在構造函數體內引用'this'完全合法。請發佈實際上失敗的代碼。你不能在構造器*初始化器*中使用'this',例如'base(this.Foo())' –
「**關鍵字'this'在靜態屬性,靜態方法或靜態字段初始值設定項中無效**」 - 我在試用代碼時得到的結果。 @JonSkeet :) –
Doh!我非常關注'這個',所以我完全錯過了AllTheThings是沒有意義的。謝謝!這樣可行。 – GMAP