我有以下课程:
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
方法中创建当前实例类型的一些实例。
我该怎么做呢?
我可以创建一个静态工厂方法,它接受我想要创建的子类的名称,然后使用DoSomething
在this.GetType().Name
方法中传递当前实例的类名。
但这是最好的方式吗?
非常感谢大家。
答案 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上使用其他重载来获取所需的特定构造函数。