以下のコードは、1つがC#で、もう1つがVB.Netであることを除いて、まったく同じです。C#は問題なくコンパイルされますが、VB.Netは警告をスローします。
インターフェイス'System.IObserver(Of Foo)'は、'インターフェイスIObserver(Of In T)'の'In'および'Out'パラメータのため、別の実装されたインターフェイス'System.IObserver(Of Bar)'とあいまいです。
VB.NetがC#ではなく警告を表示するのはなぜですか?そして最も重要なのは、どうすればこの問題を解決できますか?
Obs:Visual Studio2010Ultimateで.NetFramework4を使用しています。
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) Implements System.IObserver(Of Bar).OnError
End Sub
Public Sub OnNext(value As Bar) Implements System.IObserver(Of Bar).OnNext
End Sub
Public Sub OnCompleted1() Implements System.IObserver(Of Foo).OnCompleted
End Sub
Public Sub OnError1([error] As System.Exception) Implements System.IObserver(Of Foo).OnError
End Sub
Public Sub OnNext1(value As Foo) Implements System.IObserver(Of Foo).OnNext
End Sub
#End Region
End Class
End Module
C#コード:
class Program {
static void Main(string[] args) {
}
}
public class Foo { }
public class Bar { }
public class Beholder : IObserver<Foo>, IObserver<Bar> {
#region IObserver<Foo> Members
public void OnCompleted() {
throw new NotImplementedException();
}
public void OnError(Exception error) {
throw new NotImplementedException();
}
public void OnNext(Foo value) {
throw new NotImplementedException();
}
#endregion
#region IObserver<Bar> Members
public void OnNext(Bar value) {
throw new NotImplementedException();
}
#endregion
}