我想知道这样的事情是否可能......
class Thing
{
public Thing(int i)
{
}
}
class DerivedThing : Thing
{
public DerivedThing(int i)
{
}
}
_thing = new Thing(0)
_derivedthing = new Thing(1)
如果你传递0你会得到一个东西,如果你传递1你得到一个DerivedThing 这不完整,只是一个例子..但基本上我想知道是否/如何根据传递给基类构造函数的参数值返回不同的派生类? 或者你只需要另外一些代码来决定调用哪个构造函数?
答案 0 :(得分:7)
回答你的问题:不,这是不可能的。但...
您实际上正在寻找Factory
模式。您可以在工厂方法中轻松添加区分if / case并且仍然具有相对干净的代码。
答案 1 :(得分:3)
这是不可能的。
相反,您可以创建一个static Thing Create(int i)
方法来决定调用哪个构造函数。
答案 2 :(得分:1)
不,你为什么要这样做?
您也可以输入
var thing = new Thing();
var derivedThing = new DerivedThing();
你可以这样,
public static class ThingFactory
{
public interface IThing {}
public enum ThingType
{
Thing,
DerivedThing
}
public static IThing CreateThing(ThingType type)
{
switch(type)
{
case ThingType.DerivedThing:
return new DerivedThing();
default:
return new Thing();
}
}
private class Thing : IThing {}
private class DerivedThing : Thing {}
}
允许,
var thing = ThingFactory.CreateThing(ThingType.Thing);
var derivedThing = ThingFactory.CreateThing(ThingType.DerivedThing);