7

我们有一个 VB.NET 项目,我正在对它进行一些重构。许多当前函数需要将 auserId作为参数传入。例如:

Private Function Foo(userId As Integer) As String
    Return "Foo"
End Function

但是现在,我已经使userId我们的大部分代码不再需要这个参数。

我在想我会userId从所有不再需要它们的函数中删除所有参数,然后尝试重新构建项目以查看调用代码需要更改的内容。但令我惊讶的是,代码构建成功。

我了解到您可以调用一个返回字符串且不带任何参数但仍传入一个Integer值的函数。VB.NET 构建/执行此代码,就像您尝试调用该函数然后从指定索引处的字符串中获取字符一样。例如:

Imports System

Public Module MyModule
    Private Function Foo() As String
        Return "Foo"
    End Function

    Public Sub Main()
        Console.WriteLine(Foo(0)) ' prints 'F'
        Console.WriteLine(Foo(1)) ' prints 'o'
    End Sub
End Module

.NET 小提琴

在这种情况下,我希望我的构建失败。我试过使用Option Strict OnOption Explicit On但似乎都没有改变这种行为。

无论如何在我的 VB.NET 项目中使这种函数调用无效?

4

1 回答 1

4

创建一个没有参数的重载,它在其他方面都是原始函数的副本。

Public Function Foo() As String
    Return "Foo"
End Function

现在将 userId 的类型更改为其他类型(不是Object或任何数字等)

Public Function Foo(userId As DateTime) As String
    Return "Foo"
End Function

由于参数有重载,编译器认为您的意思是调用它,而不是索引 chararray。所以你有编译错误。修复错误

然后删除原来的功能。

于 2018-01-11T21:09:36.670 回答