C# 在迭代中从基类到派生类
我有一个基类,它有一些属性。在我的派生类中,这就是我想要实现一些计算加法和减法的地方 我实现了一个基类列表。列表在我的迭代foreach中,我必须实现派生类的函数来进行计算示例计算-加法。 我们如何实施这一点?如果不清楚,请告诉我C# 在迭代中从基类到派生类,c#,.net,C#,.net,我有一个基类,它有一些属性。在我的派生类中,这就是我想要实现一些计算加法和减法的地方 我实现了一个基类列表。列表在我的迭代foreach中,我必须实现派生类的函数来进行计算示例计算-加法。 我们如何实施这一点?如果不清楚,请告诉我 public class A { public int value1 { get; set;} public int value2 { get; set;} public virtual int sum { get { return 0 ;} } } p
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);
}
这是因为在您的示例中,类型A的每个实例都是类型A,类型B的每个实例都是类型B和类型A。完全不清楚您当前的方法有什么问题听起来您需要强制转换,但不清楚您正在尝试做什么。。。你打算如何保证列表中的每个对象都是B对象?如果是,为什么不是B的列表呢?如果列表中包含B实例,运行时将调用B.Sum。我相信这就是你要问的。听起来你可能在使用继承,而实际上你想要类似于策略模式的东西。您似乎希望使用单一类型的对象列表,然后在运行时选择具体的求和逻辑。这是foreach循环中退出的代码。
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);
}