所以,我有这段代码:
public class Fruit {
public Fruit() {
// base class constructor
}
}
public class Apple: Fruit {
public Fruit(): base() {
// child class constructor
}
}
T MakeNew<T>(T item) where T: Fruit, new() {
T tempNewClass = new T();
return tempNewClass;
}
然后,在我的计划中:
Apple apple = new Apple();
Apple anotherApple = MakeNew<Apple>(apple);
为什么anotherApple属于Apple类,但在我的方法中创建时,只调用基本构造函数,就像它只被视为基类一样?
我猜,那是因为方法init行上的new()关键字。
有没有办法在泛型方法中创建子类并调用它的构造函数?
PS:拜托,我正在学习C#,并尽力从互联网上获得我需要的所有答案。我现在4天就遇到了这个问题,并没有在其他地方找到合适的答案。但我可能是错的,也许我只是在问错误的问题?
答案 0 :(得分:0)
您可能只是注意到在基类之前始终调用基类构造函数。尝试运行下面的代码来观察行为:
static void Main(string[] args)
{
Console.WriteLine("new Apple()");
Apple apple = new Apple();
Console.WriteLine();
Console.WriteLine("MakeNew<Apple>(apple)");
Apple anotherApple = MakeNew<Apple>(apple);
}
static private T MakeNew<T>(T item) where T: Fruit, new()
{
return new T();
}
public class Fruit
{
public Fruit()
{
Console.WriteLine("Fruit Constructor");
}
}
public class Apple : Fruit
{
public Apple() : base()
{
Console.WriteLine("Apple Constructor");
}
}
}