强制通用约束时
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的类。