迭代中派生类的基类

时间:2014-09-15 07:32:59

标签: c# .net

我有这个基类有一些属性。在我的派生类中,这是我想要实现一些计算(例如加法和减法)的地方。

我实现了一个基类列表。 List<A>。在我的Iteration(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);
 }

2 个答案:

答案 0 :(得分:0)

如评论中所述,只需使用以下代码:

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上的方法,一切都应该正常。

答案 1 :(得分:0)

只需修改上面评论

中提到的内容即可
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.