5

我有一个 A 类,它有 2 个普通属性(字符串属性)和 1 个静态属性(A 类型列表)。在构造函数中创建 A 类的新实例时,我想将该实例添加到静态列表属性中。我有两个问题。

1-有可能吗?

2-如果可能的话,我该如何实施。

我正在使用以下代码:

public class A {
private string _property1;
private string _property2;
private static List<A> _AList;

public string Property1 {
  get { return _property1; }
  set { _property1 = value; }
}

public string Property2 {
  get { return _property2; }
  set { _property2 = value; }
}

public static List<A> AList {
  get { return _AList; }
  set { _AList = value; }
}
public A( ) {
}

}

4

5 回答 5

10

1 - 有可能吗?

是的。

2 - 如果可能的话,我该如何实施。

在静态构造函数中初始化列表

static A() {
    AList = new List<A>();
}

然后在实例构造函数中添加实例

public A( ) {
    A.AList.Add(this);
}
于 2012-10-31T16:27:27.230 回答
2

您必须在声明中或在静态构造函数中创建列表。

private static List<A> _AList = new List<A>();

或者

private static List<A> _AList;

static A()
{
    _AList = new List<A>();
}

在实例构造函数中,您可以添加新项目

public A()
{
    A.AList.Add(this);
}

注意:静态构造函数不能是公共的,因为它们不能被显式调用。它们在创建第一个实例或引用任何静态成员之前自动调用。

请参阅静态构造函数(C# 编程指南)

于 2012-10-31T16:28:13.707 回答
2

对于除 List 之外的其他类型将正常工作。对于列表,您必须执行以下操作:

public static List<A> AList {
 get { 
       if(_AList == null) _AList = new List<A>();
       return _AList; 
     }
 set { _AList = value; }
}
于 2015-11-16T08:53:35.853 回答
1

是的,它是可能的,你可以在里面实现它factoryMethod

在此类中,添加此方法以用于创建新实例并将其添加到列表 - 将构造器设置为私有

public static A CreateInstance ()
{
     A instance = new A();
     if(AList==null)
       AList = new List<A>();
     AList.add(instance);  
     return A;
}

如果您想在任何地方从此类创建实例:

A ins = A.CreateInstance ()
于 2012-10-31T16:42:55.120 回答
0

AList.Add(this);在构造函数中应该将正在构造的对象实例添加到列表中。

于 2012-10-31T16:29:02.290 回答