我有一个通用类。构造函数需要接受一个参数,该参数是同一类的另一个实例。问题是另一个实例可以具有不同的泛型类型。
看起来 C# 允许我拥有一个具有自己的泛型类型的方法,但这对于构造函数来说似乎是不允许的。
public class MyClass<T>
{
public MyClass<T2>(MyClass<T2> parent = null)
{
}
// ... Additional stuff
}
上面的代码告诉我T2
未定义。它不接受它作为方法类型。
一种方法是向我的类添加第二个泛型类型。但这很尴尬,而且在很多情况下,争论会是这样的:null
并且没有类型。
有人看到解决这个问题的简单方法吗?
不允许使用通用构造函数。但是,您可以改用通用工厂方法。
public class MyClass<T>
{
public int Id { get; private set; }
public int? ParentId { get; private set; }
public static MyClass<T> Create(int id)
{
return Create<object>(id, null);
}
public static MyClass<T> Create<T2>(int id, MyClass<T2> parent = null)
{
var current = new MyClass<T>();
current.Id = id;
current.ParentId = parent?.Id;
return current;
}
private MyClass()
{
}
// ... Additional stuff
}
使用示例:
var intClass = MyClass<int>.Create(55);
var charClass = MyClass<char>.Create(234, intClass);
// charClass.ParentId is 55
仅当您不需要访问任何通用成员时,这才是可能的parent
工厂方法之外。如果这样做,最好通过非泛型接口或基类对其进行抽象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)