假设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").
我该怎么办?
答案 0 :(得分:8)
单个班级无法做到这一点。 A
是A
,具有相同的属性 - 无论其构造方式如何。
你可以拥有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;
}
}
}