gpt4 book ai didi

c# - 多泛型歧义

转载 作者:太空狗 更新时间:2023-10-30 00:44:08 24 4
gpt4 key购买 nike

下面的代码完全一样,只是一个是C#,一个是VB.Net。C# 编译得很好,但 VB.Net 抛出警告:

Interface 'System.IObserver(Of Foo)' is ambiguous with another implemented interface 'System.IObserver(Of Bar)' due to the 'In' and 'Out' parameters in 'Interface IObserver(Of In T)'

为什么 VB.Net 显示警告而不是 C#?最重要的是,我该如何解决这个问题?

观察:我正在使用 .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) 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
}

最佳答案

总结:

  • VB 似乎在这里发出不必要的警告。当 VB 测试人员从圣诞节假期回来时,我会向他们提及它。
  • 无论是否安全,这都是一种可疑的编程做法;实现同一个接口(interface)的两个版本有点奇怪。
  • 如果相反,您选择了一个协变 接口(interface),例如IEnumerable<T>那么警告将是合理的。如果你有一个既是海龟序列又是长颈鹿序列的对象,那么当你将它隐式转换为动物序列时会发生什么?你有海龟或长颈鹿吗?运行时只是选择一个,这不一定是您想要的行为。

有关最后一点的一些有趣讨论,请参阅我 2007 年关于该主题的文章的评论:

http://blogs.msdn.com/b/ericlippert/archive/2007/11/09/covariance-and-contravariance-in-c-part-ten-dealing-with-ambiguity.aspx

关于c# - 多泛型歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8647738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com