簡體   English   中英

迭代中的基類到派生類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM