迭代中基类到派生类
本文关键字:派生 基类 迭代 | 更新日期: 2023-09-27 18:21:55
我有一个基类,它有一些属性。在我的派生类中,这是我想要实现一些计算(例如加法和减法)的地方。
我实现了一个基类列表。CCD_ 1。在迭代(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。