2

このようなことが可能かどうか疑問に思っています...

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

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

_thing = new Thing(0)

_derivedthing  = new Thing(1)

0 を渡すと Thing が取得され、1 を渡すと DerivedThing が取得されます。これは完全ではありません。単なる説明です。しかし、基本的には、渡されたパラメーターの値に基づいて異なる派生クラスを返すことができるかどうか、またはどのように返すことができるか疑問に思っています。ベースクラスのコンストラクターに? それとも、どのコンストラクターを呼び出すかを決定する別のコードが必要ですか?

4

3 に答える 3

3

それは不可能です。

代わりに、static Thing Create(int i)呼び出すコンストラクターを決定するメソッドを作成できます。

于 2013-02-13T15:46:45.310 に答える
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);
于 2013-02-13T15:47:53.533 に答える