我有以下代码(一个更复杂的项目的简单示例),其中我有一个对象类型列表的静态“主”列表。
如果您单步执行代码,我希望通过构造函数创建第二个referenceManager3类型时,_masterList将包含String和Object列表。但事实并非如此。
我认为这是因为由于泛型类型定义,ReferenceManager3的每个实例实际上都是不同的类类型。我认为这是正确的吗?
我该如何做到这一点?
class Program
{
static void Main(string[] args)
{
ReferenceManager3<string> StringManager = new ReferenceManager3<string>();
ReferenceManager3<object> IntManager = new ReferenceManager3<object>();
}
}
class ReferenceManager3<T> where T : class //IReferenceTracking
{
// Static list containing a reference to all Typed Lists
static List<IList> _masterList = new List<IList>();
// Object Typed List
private List<T> _list = null;
public ReferenceManager3()
{
// Create the new Typed List
_list = new List<T>();
// Add it to the Static Master List
_masterList.Add(_list); // <<< break here on the second call.
}
}
答案 0 :(得分:5)
您可以从非泛型(抽象)基类派生泛型类:
abstract class ReferenceManager3
{
// Static list containing a reference to all Typed Lists
protected static List<IList> _masterList = new List<IList>();
}
class ReferenceManager3<T> : ReferenceManager3 where T : class //IReferenceTracking
{
// Object Typed List
private List<T> _list = null;
public ReferenceManager3()
{
// Create the new Typed List
_list = new List<T>();
// Add it to the Static Master List
_masterList.Add(_list); // <<< break here on the second call.
}
}
答案 1 :(得分:0)
是的,您的假设是正确的,ReferenceManager3<string>
和ReferenceManager3<object>
是不同的类,没有任何共同点。所以这两个类也有自己的(静态)列表。
但是,您可以创建包含静态列表的非泛型抽象类。现在只需在Fratyx提及的情况下,从普通类中实现这个类。