由于C#中的特定构造函数导致的变量类属性

时间:2013-01-24 10:57:02

标签: c# class properties

假设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").

我该怎么办?

2 个答案:

答案 0 :(得分:8)

单个班级无法做到这一点。 AA,具有相同的属性 - 无论其构造方式如何。

可以拥有abstract A的2个子类和工厂方法......

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

但是:调用者不会知道值,除非他们投了它。

答案 1 :(得分:2)

使用泛型

public class A<T>
{
    private T _value;

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

    public TValue
    {
        get
        {
            return this._value;
        }
    }
}