[英]Base class to Derived class in Iteration
我有這個具有一些屬性的基類。 在我的派生類中,這是我想要實現一些計算(例如加法和減法)的地方。
我實現了一個基類列表。 List<A>
。 在我的迭代(foreach)中,我必須實現派生類進行計算(樣本計算-加法)。 我們如何實現呢? 如果不清楚,請通知我。
public class A {
public int value1 { get; set;}
public int value2 { get; set;}
public virtual int sum { get { return 0 ;} }
}
public class B : A {
public override int sum {
get {
return value1 + value2;
}
}
}
List<A> collection = new List<A>();
collection.Add(new A { value1 = 1, value2 = 1 });
collection.Add(new A { value1 = 2, value2 = 2 });
collection.Add(new A { value1 = 3, value2 = 3 });
foreach (var item in collection.OfType<B>())
{
Console.WriteLine(item.sum);
}
如評論中所述,只需使用以下代碼:
List<A> collection = new List<A>();
collection.Add(new B { value1 = 1, value2 = 1 });
collection.Add(new B { value1 = 2, value2 = 2 });
collection.Add(new B { value1 = 3, value2 = 3 });
foreach (var item in collection)
{
Console.WriteLine(item.sum);
}
sum
方法將在運行時解析為B
上的方法,並且一切正常。
只需按照上面的評論中所述修改它
collection.Add(new A { value1 = 1, value2 = 1 });
collection.Add(new A { value1 = 2, value2 = 2 });
collection.Add(new A { value1 = 3, value2 = 3 });
foreach (var item in collection.OfType<B>())
{
Console.WriteLine(item.sum);
}
為此,它應該工作
collection.Add(new B { value1 = 1, value2 = 1 });
collection.Add(new B { value1 = 2, value2 = 2 });
collection.Add(new B { value1 = 3, value2 = 3 });
foreach (var item in collection)
{
Console.WriteLine(item.sum);
}
這是因為在您的示例中,類型A的每個實例都是類型A,類型B的每個實例都是類型B和類型A。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.