我有一个基类型,从中继承了 3 个不同的对象。让我们将基础对象称为 B,并将继承的对象称为 X、Y 和 Z。现在我有一个以 int 作为键并分别以 X、Y、Z 作为值的字典。
我有一个控件,需要在一个且仅一个特定词典中进行查找以绘制自身,但为了能够使用我的所有三个词典,我尝试指定该控件应采用等于的参数Dictionary<int, B>
.但这没有用。
那么我的选择是什么?我希望我的控件能够处理 <int, B>
形式的所有词典.
最佳答案
像这样创建一个通用方法:
public void DoSomething<T>(IDictionary<int, T> dictionary) where T : B
或者类似地使控件本身通用(这会给您的设计师带来问题,但是......)
public class MyControl<T> where T : B
{
private IDictionary<int, T> dictionary;
...
}
由于泛型不变性,您需要这样做。即使在 C# 4(支持一些变体)中,这也是不变的:字典使用输入和输出的值。
假设您可以从 Dictionary<int, X>
转换至 Dictionary<int, B>
.然后你就可以写:
dictionary[0] = new B();
... 这显然对字典无效,因为它不是 X
。 ...
关于c# - 字典的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1449551/