强制通用约束时

class GenericTest
{
    public void Sample<T>(T someValue) where T:Racer,new()
    {
        Console.WriteLine(someValue.Car);
    }
}


T型应该从基本型赛车手派生而来(如果有任何错误,请纠正我)。

public class Racer
    {
        string name;
        string car;
        public Racer() { }
        public Racer(string name, string car)
        {
            this.name = name;
            this.car = car;
        }

        public string Name
        {
            get { return name; }
        }
        public string Car
        {
            get { return car; }
        }

    }


在“ Main()”中,我执行为

static void Main(string[] args)
    {

        List<Racer> rcr = new List<Racer>();
        rcr.Add(new Racer("James","Ferrari"));
        rcr.Add(new Racer("Azar","Bmw"));

        rcr.Sort(delegate(Racer a, Racer b)
        {return a.Name.CompareTo(b.Name); });

        GenericTest tst = new GenericTest();

        tst.Sample<Racer>(rcr[0]);

        Console.ReadLine();

    }


我的问题是:

我实现的约束是where T:Racer,new(),因此T应该从Racer派生。
但是在Main()中,我正在传递(tst.Sample<Racer>(rcr[0]);)类型的"Racer"。代码正在工作。

赛车如何从赛车中衍生出来?

最佳答案

MSDN:http://msdn.microsoft.com/en-us/library/d5x73970.aspx


  where T : <base class name>
     类型参数必须是指定的基类或从指定的基类派生。


注意的点必须是或源自。这意味着Racer以及任何衍生自Racer的类。

09-05 14:55