【发布时间】:2017-05-15 12:26:05
【问题描述】:
C# 编译器:
错误 CS0738:Field<T>' does not implement interface memberField.Value.get' 和最佳实现候选 Field<T>.Value.get' return typeT' 与接口成员返回类型“对象”不匹配
public interface Field
{
object Value {get;}
}
public class MyField<T> : Field
{
T _value;
public T Value
{
get
{
return _value;
}
}
}
为什么? List 扩展了 Microsoft 类中的 List,但我作为用户(复制相同的设计模式)不允许这样做吗?为什么?
尝试 where T: object 也会产生编译器错误...
我该如何解决这个问题?
关于同一主题的其他 1.000.000 个线程,说:
blablabla, '返回类型协方差', blablabla, '你不能'。
他们没有就如何编译这个野兽提出解决方案或变通方法。
要求:
1)Field是一个不能接受泛型的接口。名为“unity”的邪恶框架禁止泛型。
2)“实现字段”具有通用T的字段
【问题讨论】:
-
旁注:为什么将字段
_value设为公开?这违背了封装字段的目的......使其私有 -
C# 编译器爱你,希望你安全高效,因此有时它会阻止你做危险的、非生产性的事情。就像你妈妈不让你在屋顶上骑自行车一样,即使那样会很棒。
-
List<T>没有什么特别之处。这是一个普通的类,由对编译器内部没有特殊访问权限的人编写,编译器对它没有什么特别的。如果你想知道List<T>的作者是如何实现IList的,可以阅读源码。 -
它叫做Explicit Interface Implementation,正如你所见,它既不是特别的,也不是没有提到的MS。
-
我投票决定将此问题作为离题结束,因为 "your question is just a rant in disguise: '........ sucks, am I right?'"
标签: c# generics types covariance covariant-return-types