为什么我有两个方法具有相同的参数但不同的回报?

时间:2015-05-29 16:20:43

标签: vb.net generics

.net允许......

<script>

    var button = document.getElementById("button");

    button.onclick = function() {

        var geoSuccess = function (position) {
            var startPos = position;
            alert("longlat" + startPos.coords.longitude);
        };
        var geoError = function (error) {
             alert("unable");
        };

        navigator.geolocation.getCurrentPosition(geoSuccess, geoError);
 };

</script>

它通过查看参数的类型来确定要调用哪一个,例如...

Public Function One(A as Integer) As String...
Public Function One(B as String) As String...

好的,为什么你不能这样做......

Dim A As String = One(5)

编译器可以获得相同数量的信息......

Public Function One(A as Integer) As String...
Public Function One(B as Integer) As Integer...

我尝试解决的具体问题是在Dim A As Integer = One(5) ' should know to call the second version 中返回Values,以便COM Interop 可以看到。为此,我只需将Dictionary(Of Integer, MyClass)作为.Values返回。但后来我丢失了我自己的代码中的类型,这是一个PITA。如果我可以有两个方法,我可以有一个返回IEnumerable,另一个返回List(Of MyClass),两个地方的API都是相同的。我可以有两种不同的方法名称,但这种方法会失败。

我对任何修复底层问题的解决方案持开放态度......我可以返回一种类型,避免在我自己的代码中使用所有DirectCast,同时COM Interop仍然可以看到它吗?

1 个答案:

答案 0 :(得分:4)

简短回答:因为返回类型不包含在方法的签名中

spec

的相关部分
  

以下内容不属于会员的签名,因此不能超载:

     
      
  • 类型成员的修饰符(例如,SharedPrivate)。
  •   
  • 参数的修饰符(例如,ByValByRef)。
  •   
  • 参数的名称。
  •   
  • 方法的返回类型或属性的元素类型。
  •