通用 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 中实现这个
我有以下代码(一个更复杂项目的简单示例),其中我有一个对象类型列表的静态 '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 中实现这个