C#如何在本类不声明泛型的前提下对一个成员字段/属性使用泛型集合
这种使用场景比较极端,但也比较常见。当本类继承单例模式基类后,由于单例基类本身需要子类传递一个泛型,这时的本类便无法在声明泛型了。但此时的我们又需要在类中声明泛型集合的成员。这种情况下我们使用以下操作来保证我们的成员可以使用泛型集合。
//创建一个空接口,此接口会是成员的类型
interface IInter
{
}
//创建一个泛型类继承自空接口
class MyList<T> : IInter
{
//此泛型类中会有一个私有的泛型集合字段和一些必要的方法
private List<T> list;
public MyList()
{
list = new List<T>();
}
public void Add(T param)
{
list.Add(param);
}
}
//继承单例类的类
public class Test : MonoSingleton<Test>
{
//创建一个空接口类型的成员并初始化。
//相当于通过一个空接口封装了一个泛型。
IInter instance;
private void Add<T>() where T : struct
{
//当要使用成员时要强转,这里的?是判断引用类型是否为空的一种简便写法。
//如果instance为null则不执行Add方法
(instance as MyList<T>)?.Add(1);
Console.ReadKey();
}
}