2

クラスAを次のように想定します。

public class A
{
    private string _str;
    private int _int;

    public A(string str)
    {
        this._str = str;
    }

    public A(int num)
    {
        this._int = num;
    }

    public int Num
    {
        get
        {
            return this._int;
        }
    }

    public string Str
    {
        get
        {
            return this._str;
        }
    }
}

クラスをStr構築するときにプロパティを非表示にしたいA

new A(2)

クラスを次のようNumに構築するときにプロパティを非表示にしたいA

new A("car").

私は何をすべきか?

4

2 に答える 2

8

これは、単一のクラスでは不可能です。AnAはでありA、その構成方法に関係なく、同じプロパティを持ちます。

の2つのサブクラスと、ファクトリメソッドを持つことができます。abstract A

public abstract class A
{
    class A_Impl<T> : A
    {
        private T val;
        public A_Impl(T val) { this.val = val; }
        public T Value { get { return val; } }
    }
    public static A Create(int i) { return new A_Impl<int>(i); }
    public static A Create(string str) { return new A_Impl<string>(str); }
}

しかし:発信者は、キャストしない限り、値について知りません。

于 2013-01-24T10:59:41.893 に答える
2

ジェネリックを使用する

public class A<T>
{
    private T _value;

    public A(T value)
    {
        this._value= value;
    }

    public TValue
    {
        get
        {
            return this._value;
        }
    }
}
于 2013-01-24T11:01:21.760 に答える