具有generics构造函数的generics类?

我有一个通用类。 构造函数需要接受一个参数,该参数是同一个类的另一个实例。 问题是另一个实例可以有不同的generics类型。

看起来C#允许我有一个带有它自己的generics类型的方法,但这似乎不允许构造函数。

public class MyClass { public MyClass(MyClass parent = null) { } // ... Additional stuff } 

上面的代码告诉我T2未定义。 它不接受它作为方法类型。

一种方法是在我的class级中添加第二种通用​​类型。 但这很尴尬,在很多情况下,参数将为null并且没有类型。

有没有人看到这个简单的方法?

你是对的。 不支持通用构造函数。

您可以尝试以下方法:

创建较低级别的通用界面

 public interface IMyClass { //...some common stuff IMyClass Parent { get; set; } } 

并将其用作类型之间的通用链接

 public class MyClass : IMyClass { public MyClass(IMyClass parent = null) { Parent = parent; } public IMyClass Parent { get; set; } // ... Additional stuff } 

不允许使用通用构造函数。 但是,您可以使用通用工厂方法。

 public class MyClass { public int Id { get; private set; } public int? ParentId { get; private set; } public static MyClass Create(int id) { return Create(id, null); } public static MyClass Create(int id, MyClass parent = null) { var current = new MyClass(); current.Id = id; current.ParentId = parent?.Id; return current; } private MyClass() { } // ... Additional stuff } 

样品用途:

 var intClass = MyClass.Create(55); var charClass = MyClass.Create(234, intClass); // charClass.ParentId is 55 

只有在您不需要访问工厂方法之外的任何parent通用成员时,才可以执行此操作。 如果这样做,最好通过非generics接口或基类来抽象它。