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

这对于一个班级是不可能的。AnAA, 并且具有相同的属性 - 无论它是如何构造的。

可以有 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 回答