【发布时间】:2014-09-15 07:32:58
【问题描述】:
我有这个具有一些属性的基类。在我的派生类中,这是我想要实现一些计算(例如加法和减法)的地方。
我实现了一个基类列表。 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);
}
【问题讨论】:
-
目前的方法有什么问题完全不清楚
-
听起来你需要强制转换,但不清楚你正在尝试做什么......你打算如何保证列表中的每个对象都是 B 对象?如果是,为什么不是
B的列表? -
如果您的
List<A>包含B实例运行时将调用B.Sum。我相信这就是您要问的问题。 -
听起来您可能正在使用继承,而实际上您想要类似策略模式的东西。您似乎想使用单一类型的对象列表,然后在运行时选择具体的求和逻辑。
-
嗨,我添加了迭代代码。这是在 foreach 循环中退出的代码。