2

特定のコンストラクターが使用されている場合、メソッドを非表示/表示する方法はありますか? すなわち:

public class SomeClass
{
    public SomeClass(string methodA)
    {

    }

    public SomeClass(int methodB)
    {

    }

    public string MethodA()
    {
        return "";
    }

    public int MethodB()
    {
        return 0;
    }
}

が使用されている場合、新しいオブジェクトをインスタンス化するときにSomeClass(string methodA)のみ使用できますか? 同じ場合は使用可能でしょうか?MethodA()SomeClassSomeClass(int methodB)MethodB()

皆さん、ありがとうございました!

4

3 に答える 3

5

いいえ、できません。

より可能性が高いのは、ジェネリックを使用したいということです:

public interface IFoo<T>
{
    T Method();
}

public class IntFoo : IFoo<int>
{
    int value;
    public IntFoo(int value)
    {
        this.value = value;
    }

    public int Method()
    {
        return value;
    }
}

public class StringFoo : IFoo<string>
{
    string value;
    public StringFoo(string value)
    {
        this.value = value;
    }

    public string Method()
    {
        return value;
    }
}

文字列または整数のみに制限する必要がない場合 (またはしたくない場合) は、次のようなものが機能するか、さらに優れている可能性があります。

public class Foo<T>
{
    private T value;
    public Foo(T value)
    {
        this.value = value;
    }

    public T Method()
    {
        return value;
    }
}
于 2012-12-05T21:51:11.547 に答える
0

いいえ、できません。抽象クラスを作成し、抽象クラスから継承する 2 つの別個のクラスを作成する方がよいでしょう。抽象的なデザインパターンを参照してください。

于 2012-12-05T21:49:17.423 に答える
0

クラスにジェネリックを使用する方がよい場合があります。おそらく探しているよりも少し流動的ではありませんが (クラス宣言で型を定義する必要があるため)、主に必要なことは達成できると思います。

public class SomeClass<T>
{
    public SomeClass(T value)
    {
    }

    public T Method() { return default(T); }
}

つまり、クラスのインスタンスを作成するには、「new SomeClass(0);」を使用します。単に「new SomeClass(0);」ではなく

于 2012-12-05T22:06:52.120 に答える