扩展和模块方法之间的冲突

时间:2018-06-20 06:50:12

标签: .net vb.net name-collision

我有一个类和一个包含上述类扩展的模块:

Public Class MyString
End Class

Module StringExt

  <Extension()>
  Public Function Replace(str As MyString) As String
    Return ""
  End Function

End Module

在同一个命名空间中,我有另一个使用以下方法的类:

Public Shared Function DoReplace(str As String) As String
  Return Replace(str, "bla", "blabla")
End Function

Replace旨在引用Microsoft.VisualBasic.Strings.Replace,并且在没有上述扩展的情况下也可以正常编译。使用该扩展名,将导致编译错误:

Value of type "String" cannot be converted to "MyString"

当存在一个具有匹配的类型签名和可见名称的方法时,为什么编译会在这里失败?

明确使用Strings.Replace()解决了这个问题,但我不明白为什么首先需要这样做。

感谢您的帮助。

0 个答案:

没有答案