[英]Casting Down from Base class
我知道轉換並不是天生的壞習慣,但是在這種情況下是不好的嗎?
我具有以下類層次結構,並且在最后強制轉換。
public class A<T>
{
public A(string name, T value)
{
Name = name;
Value = value;
}
public string Name { get; }
public T Value { get; }
}
public class B : A<double>
{
public B(string name, double value, string expression)
: base(name, value)
{
Expression = expression;
}
public string Expression { get; }
}
public class C
{
public C(A<double> a)
{
_a = a;
}
public string Name { get { return _a.Name; } }
public double Value { get { return _a.Value; } }
protected A<double> _a;
}
public class D : C
{
public D(B b) : base(b)
{
}
public string Expression { get { return ((B)_a).Expression; } }
}
問題所在的行: public string Expression {get {return((B)_a).Expression; }}
是的,這是不好的做法; 像所有的垂頭喪氣(有時需要確定;但這並不能很好)。
以下代碼將生成運行時異常:
A<double> myA = new A<double>("Test", 1.0d);
D test = new D(myA);
var boom = test.Expression; //InvalidCastException
而采用其他結構甚至無法編譯。 例如,將D
修改為B
而不是A<double>
試試這個,使C類通用
public class C<T> where T : A<double>
{
public C(T thing)
{
_thing = thing;
}
protected T _thing;
}
然后D可以是C的實例,且B的通用參數
public D : C<B>
{
Public string Expression { get {return _thing.Expression;}}
}
我在手機上,請原諒.sny格式或拼寫錯誤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.