调用基类一集派生方法 [英] calling derived methods on a baseclass collection
本文介绍了调用基类一集派生方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个抽象类命名为A,和其他类(B,C,D,E,...)实现A.
我的派生类持有不同类型的值。
我也有一个对象的列表
I have one abstract class named A, and other classes (B, C, D, E, ...) that implements A. My derived classes are holding values of different types. I also have a list of A objects.
abstract class A { }
class B : class A
{
public int val {get;private set;}
}
class C : class A
{
public double val {get;private set;}
}
class D : class A
{
public string val {get;private set;}
}
class Program
{
static void Main(string[] args)
{
List list = new List { new B(), new C(), new D(), new E() };
// ...
foreach (A item in list)
{
Console.WriteLine(String.Format("Value is: {0}", item.val);
}
}
}
。 ..where的.VAL不是由基类OFC闻名。
...where the .val is not known by the base-class ofc.
我怎样才能得到这个动态的行为吗?我不想在长时间使用的getType 。开关/ if语句
How can i get this dynamic behaviour? I don't want to use getType in a long switch/if-statements.
推荐答案
试试这个:
using System;
using System.Collections.Generic;
abstract class A
{
public abstract dynamic Val { get; set; }
}
class B : A
{
public override dynamic Val { get; set; }
}
class C : A
{
public override dynamic Val { get; set; }
}
class D : A
{
public override dynamic Val { get; set; }
}
class Program
{
static void Main(string[] args)
{
var list = new List<A> { new B(), new C(), new D() };
// ...
foreach (A item in list)
{
Console.WriteLine(String.Format("Value is: {0}", item.Val));
}
}
}
这篇关于调用基类一集派生方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文