Omi*_*ron 5 c# polymorphism casting covariance
我有一个名为A的抽象类,以及实现A的其他类(B,C,D,E,...).我的派生类包含不同类型的值.我还有一个A对象列表.
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
...其中.val不为基类ofc所知.
我怎样才能获得这种动态行为?我不想在long switch/if-statements中使用getType.
小智 2
尝试这个:
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));
}
}
}
Run Code Online (Sandbox Code Playgroud)