Tag: generics方差

多个generics模糊

下面的代码是完全相同的,除了一个是C#,另一个是VB.Net。 C#编译得很好,但VB.Net会抛出警告: 接口’System.IObserver(Of Foo)’与另一个实现的接口’System.IObserver(Of Bar)’不明确,因为’接口IObserver(Of T)中的’In’和’Out’参数 为什么VB.Net显示警告而不是C#? 最重要的是,我该如何解决这个问题? Obs:我正在使用.Net Framework 4和Visual Studio 2010 Ultimate。 VB.Net代码: Module Module1 Sub Main() End Sub Public Class Foo End Class Public Class Bar End Class Public Class Beholder Implements IObserver(Of Foo) Implements IObserver(Of Bar) #Region “Impl” Public Sub OnCompleted() Implements System.IObserver(Of Bar).OnCompleted End Sub Public Sub OnError([error] As System.Exception) […]

为什么C#不支持变体generics类?

拿这个小LINQPad示例: void Main() { Foo foo = new Foo(); Console.WriteLine(foo.Get()); } class Foo { public T Get() { return default(T); } } 它无法使用此错误进行编译: 方差修饰符无效。 只能将接口和委托类型参数指定为变量。 我没有看到代码的任何逻辑问题。 一切都可以静态validation。 为什么不允许这样做? 它是否会导致语言不一致,或者由于CLR的限制而被认为实施起来太昂贵了? 如果是后者,我作为开发人员应该知道什么是上述限制? 考虑到接口支持它,我希望从逻辑上遵循它的类支持。