这是我最近一直试图解决的问题的简化版本。 我有以下两个类:
class Container { }
class Container<T> : Container
{
T Value
{
get;
private set;
}
public Container(T value)
{
Value = value;
}
public T GetValue()
{
return Value;
}
}
现在我想做的是:
Container<int> c1 = new Container<int>(10);
Container<double> c2 = new Container<double>(5.5);
List<Container> list = new List<Container>();
list.Add(c1);
list.Add(c2);
foreach (Container item in list)
{
Console.WriteLine(item.Value);
Console.WriteLine(item.GetValue());
}
实现此功能的最佳方式是什么?有可能吗?我想我可能有解决这个问题的方法,但我认为这是一种变通方法,我正在寻找一些设计模式。
预先感谢您的回复, 米甲。
附言
我试过接口(interface)、虚函数、抽象类、抽象函数;甚至在父类(super class)中创建函数来按名称调用真实类型的属性(使用反射)...我仍然无法实现我想要的...
最佳答案
您可以将基类 Container 放入接口(interface)中:
interface IContainer
{
object GetValue();
}
然后在派生类中显式实现:
class Container<T> : IContainer
{
public T Value { get; private set; }
public Container(T value)
{
Value = value;
}
public T GetValue()
{
return Value;
}
object IContainer.GetValue()
{
return this.GetValue();
}
}
更改列表以包含 IContainer 元素:
Container<int> c1 = new Container<int>(10);
Container<double> c2 = new Container<double>(5.5);
List<IContainer> list = new List<IContainer>();
list.Add(c1);
list.Add(c2);
foreach (IContainer item in list)
{
Console.WriteLine(item.GetValue());
}
Container 的公共(public) Value 属性有点令人困惑,但你明白我的意思。
关于c# - 如何在 C# 中实现某种程度的多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5160871/