如何定义从某个基类派生的泛型类?

时间:2012-10-28 13:49:14

标签: c#

我想定义一些

的泛型类
class A : IClonable
{
    clone();
}

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

我该怎么做?

3 个答案:

答案 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
}