在父构造函数中创建子对象

Far*_*nha 3 c# oop inheritance constructor

是否可以使用父的构造函数创建子对象的实例并将其传递给某种参数(在本例中为字符串),以告诉它应该创建的子类型?

Jef*_*nal 8

在C#中,您创建一个类的实例,然后运行时调用其构造函数.到构造函数执行时,为时已晚,无法选择其他类型.

但是,派生类的构造函数总是调用其基类之一的构造函数,您可以使用它来获得优势(避免重复代码).

人们经常创建工厂来做你正在谈论的事情.例如,给定类Parent,Child1:ParentChild2:Parent,您可以编写这样的工厂:

public class ParentFactory {
    public Parent CreateParent(string type) {
        switch(type) {
            case "Child1":
                return new Child1();
            case "Child2":
                return new Child2();
            default:
                throw new ArgumentException("Unexpected type");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)