在父类的方法中创建子类的一些实例

时间:2011-04-03 02:30:17

标签: c# design-patterns inheritance constructor factory-pattern

我有以下课程:

abstract class Transport{

    protected String name;

    protected Transport(String name){
        this.name=name;
    }

    protected void DoSomething(){
        //Creating some instances of the type of the current instance   
    }   

}

class Bike: Transport {

    public Bike(String name): base(name){

    }

}

class Bus: Transport {

    public Bus(String name): base(name){

    }

}

我想要做的是在DoSomething类的Transport方法中创建当前实例类型的一些实例。

我该怎么做呢?

我可以创建一个静态工厂方法,它接受我想要创建的子类的名称,然后使用DoSomethingthis.GetType().Name方法中传递当前实例的类名。

但这是最好的方式吗?

非常感谢大家。

2 个答案:

答案 0 :(得分:10)

您可以在基类中创建一个protected abstract Transport CreateNew(string name)方法,并在派生类中覆盖它以调用它们的构造函数。

答案 1 :(得分:4)

您是否愿意使用反射?

protected void DoSomething(){
    Transport newOne =  GetType()
                           .GetConstructors()[0]
                           .Invoke(new[] {"some name"})
}

以上情况适用于您的具体情况。注意使用[0]来获取第一个构造函数。对于您问题中的小问题,这不是问题。您可以考虑在System.Type上使用其他重载来获取所需的特定构造函数。