-2

我想定义一些通用类

class A : IClonable
{
    clone();
}

我想定义一个从类 T 派生的新类,但 T 的基类是 A ==> 因此,如果新类是 B,我将能够调用 Clone 而无需再次在 B 类中定义 IClonable。

我怎样才能做到这一点 ?

4

3 回答 3

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();
        }
    }
于 2012-10-28T14:16:04.260 回答
0

你的问题不清楚,但如果我理解正确并且你想创建一个泛型类并强制 T 的类型,那么这就是你想要的:

public class B<T> where T : A

于 2012-10-28T13:53:01.867 回答
0

我不知道这里是否有什么棘手的地方。您可以从非泛型类继承具有泛型约束的类。

class A
{
    protected method1(); 
}

class B<T> : A
{
    //implement the rest
}
于 2012-10-28T13:54:07.417 回答