可以在泛型方法中调用子类构造函数吗?

时间:2016-12-03 22:19:13

标签: c# class generics inheritance constructor

所以,我有这段代码:

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天就遇到了这个问题,并没有在其他地方找到合适的答案。但我可能是错的,也许我只是在问错误的问题?

1 个答案:

答案 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");
        }
    }
}