通用 Class 中的静态列表

Static List within a Generic Class

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

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

我认为这是因为 ReferenceManager3 的每个实例实际上都是不同的 class 类型,因为通用类型定义。我这样想对吗?

我怎样才能使这个工作?

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

您可以从非通用(抽象)基础 class 派生通用 class:

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> 是不同的 class,没有任何共同点。所以两个 classes 也有自己的(静态)列表。

但是您可以创建包含静态列表的非通用摘要-class。现在只需像 Fratyx 已经提到的那样从通用的 class 中实现这个