我想定义一些
的泛型类class A : IClonable
{
clone();
}
我想定义一个从类T派生的新类,但是T的基类是A ==>因此,如果新类是B,我将能够调用Clone而无需再次在B类中定义IClonable。
我该怎么做?
答案 0 :(得分:2)
我认为你问的是当T继承自ICloneable时,如何在MyClass上提供克隆方法。如果没有明确表示MyClass也继承自IClonable,那是不可能的,因为MyClass不是从T继承的;它只是一个具有方法/属性的类,它们在某种程度上与T相关(即允许在T类的类上形成操作。
最接近我允许你通过泛型类访问T是为了破解默认的索引器属性;通过将[1]添加到MyClass实例的末尾,您将查看T克隆的单个实例。
class A : ICloneable
{
public object Clone()
{
throw new NotImplementedException();
}
public override string ToString()
{
return "Demo";
}
}
class B<T> where T : A
{
T myT;
public B(T value)
{
this.myT = value;
}
//hack the default indexer to instead allow it to be used to return N clones of myT
public IEnumerable<T> this[int index]
{
get
{
for (int i = 0; i < index; i++)
{
yield return (T)this.myT.Clone();
}
}
}
}
class Program
{
public static void Main(string[] args)
{
B<A> myB = new B<A>(new A());
Console.WriteLine( myB[1].ToString());
Console.ReadKey();
}
}
答案 1 :(得分:0)
你的问题不明确,但如果我理解正确并且您想要制作 generic 类并强制使用T类型,那么这就是您想要的:
public class B<T> where T : A
答案 2 :(得分:0)
我不知道这里有什么棘手的东西。您可以继承具有泛型约束的类 来自非通用类。
class A
{
protected method1();
}
class B<T> : A
{
//implement the rest
}