如何在c#中的构造函数中创建静态对象列表?

时间:2015-07-19 15:49:37

标签: c# constructor

我想维护一个创建的类的所有实例的列表。我想我可以通过添加这个'到构造函数中的静态列表。当然C#并没有让我参考这个'在构造函数中,因为它还没有完全构造。这是有道理的,但我试图找出实现这一目标的最佳方法。

class Thing
{ static List<Thing> AllTheThings;

  public Thing()
  { 
    AllTheThings.Add(this);  // can't reference 'this' here
  }

}

我可以想到两种方法:

  1. 将构造函数设为私有,并创建一个静态方法(&#39; MakeNewThing&#39;),该方法调用构造函数并将新实例添加到列表中。 我担心没有公共构造函数的潜在问题,但我不确定它们是什么。
  2. 创建一个包含Thing的shell类(&#39; ThingShell&#39;)。 ThingShell的构造函数创建了一个Thing并将其添加到列表中。 这很麻烦,需要ThingShell代理所有Thing的成员。
  3. 我似乎记得大约20年前在C ++中做过类似的事情但是没有回忆起细节,也无法找到代码。

    任何人都有更好的想法?

1 个答案:

答案 0 :(得分:0)

正如@Jon Skeet所说,这是指&#34;这个&#34;应该没问题。但为了以防万一,这是另一种方法。

public class Thing
{
    public readonly static List<Thing> AllTheThings = new List<Thing>();

    //making the constructor private so that no other code can call it.
    private Thing() {  }

    //providing a static instance method for creating the object
    public static Thing Instance()
    {
        var t = new Thing();
        Thing.AllTheThings.Add(t);
         return t;
    }
}

现在,在这个实现中需要注意的事情(请原谅双关语)是通过拥有所有&#34; Things&#34;的静态列表。应用程序实例化,如果你没有办法摆脱旧的&#34;事情&#34;当它们在范围内不再需要时。