泛型类中的静态列表

本文关键字:列表 静态 泛型类 | 更新日期: 2023-09-27 17:56:57

我有以下代码(一个更复杂的项目的简单示例),其中我有一个对象类型列表的静态"master"列表。

如果您逐步完成代码,我希望当通过构造函数创建第二个 referenceManager3 类型时,_masterList将同时包含字符串和对象列表。然而,事实并非如此。

我认为这是因为由于泛型类型定义,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.
    }
}

泛型类中的静态列表

您可以从非泛型(抽象)基类派生泛型类:

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.
    }
}

是的,你的假设是正确的,ReferenceManager3<string>ReferenceManager3<object>是不同的类,没有任何共同点。因此,这两个类也有自己的(静态)列表。

但是,您可以创建一个包含静态列表的非泛型抽象类。现在只需从您的通用类中实现这个类,如 Fratyx allready 所述。