你能根据传递的参数构造一个不同的派生类吗?

时间:2013-02-13 15:45:11

标签: c# inheritance polymorphism

我想知道这样的事情是否可能......

class Thing
{
        public Thing(int i)
        {
        }
}

class DerivedThing : Thing
{
        public DerivedThing(int i)
        {
        }
}

_thing = new Thing(0)

_derivedthing  = new Thing(1)

如果你传递0你会得到一个东西,如果你传递1你得到一个DerivedThing 这不完整,只是一个例子..但基本上我想知道是否/如何根据传递给基类构造函数的参数值返回不同的派生类? 或者你只需​​要另外一些代码来决定调用哪个构造函数?

3 个答案:

答案 0 :(得分:7)

回答你的问题:不,这是不可能的。但...

您实际上正在寻找Factory模式。您可以在工厂方法中轻松添加区分if / case并且仍然具有相对干净的代码。

Factory pattern description

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