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

本文关键字:一个 派生 参数 | 更新日期: 2023-09-27 17:58:54

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

class Thing
{
        public Thing(int i)
        {
        }
}
class DerivedThing : Thing
{
        public DerivedThing(int i)
        {
        }
}
_thing = new Thing(0)
_derivedthing  = new Thing(1)

如果你通过0,你得到一件事,如果你通过1,你得到了一件衍生的事这还不完整,只是一个例子。。但基本上,我想知道是否/如何根据传递给基类构造函数的参数值返回不同的派生类?还是只需要另一段代码来决定调用哪个构造函数?

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

要回答您的问题:不,这是不可能的。但是

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

工厂模式描述

这是不可能的。

相反,您可以创建一个static Thing Create(int i)方法来决定调用哪个构造函数。

否,您为什么要这样做?

你也可以键入

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