我想定义一些通用类
class A : IClonable
{
clone();
}
我想定义一个从类 T 派生的新类,但 T 的基类是 A ==> 因此,如果新类是 B,我将能够调用 Clone 而无需再次在 B 类中定义 IClonable。
我怎样才能做到这一点 ?
我想定义一些通用类
class A : IClonable
{
clone();
}
我想定义一个从类 T 派生的新类,但 T 的基类是 A ==> 因此,如果新类是 B,我将能够调用 Clone 而无需再次在 B 类中定义 IClonable。
我怎样才能做到这一点 ?
我想您是在问如何在 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();
}
}
你的问题不清楚,但如果我理解正确并且你想创建一个泛型类并强制 T 的类型,那么这就是你想要的:
public class B<T> where T : A
我不知道这里是否有什么棘手的地方。您可以从非泛型类继承具有泛型约束的类。
class A
{
protected method1();
}
class B<T> : A
{
//implement the rest
}