使用 Int 调用没有参数的字符串函数应该构建失败
String Function with No Paramaters Invoked with Int Should Fail Build
我们有一个 VB.NET 项目,我正在其中进行一些重构。许多当前函数需要 userId
作为参数传入。例如:
Private Function Foo(userId As Integer) As String
Return "Foo"
End Function
但是现在,我已经让这个 userId
参数在我们的大部分代码中不再需要了。
我想我会从所有不再需要它们的函数中删除所有 userId
参数,然后尝试重新构建项目以查看需要更改哪些调用代码。令我惊讶的是,代码构建成功。
我了解到您可以调用一个 returns 字符串且不带任何参数的函数,但仍会传入 Integer
值。 VB.NET builds/executes 此代码就像您尝试调用该函数,然后从指定索引处的字符串中获取字符一样。例如:
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
我希望我的构建在这种情况下失败。我试过使用 Option Strict On
和 Option Explicit On
但似乎都没有改变这种行为。
在我的 VB.NET 项目中有没有办法使这种函数调用无效?
创建一个不带参数的重载,它在所有其他方面都是原始函数的副本。
Public Function Foo() As String
Return "Foo"
End Function
现在将 userId 的类型更改为其他类型(不是 Object
或任何数字等)
Public Function Foo(userId As DateTime) As String
Return "Foo"
End Function
由于存在带参数的重载,编译器认为您的意思是调用它,而不是索引字符数组。所以你有编译错误。修复错误
然后删除原来的功能
我们有一个 VB.NET 项目,我正在其中进行一些重构。许多当前函数需要 userId
作为参数传入。例如:
Private Function Foo(userId As Integer) As String
Return "Foo"
End Function
但是现在,我已经让这个 userId
参数在我们的大部分代码中不再需要了。
我想我会从所有不再需要它们的函数中删除所有 userId
参数,然后尝试重新构建项目以查看需要更改哪些调用代码。令我惊讶的是,代码构建成功。
我了解到您可以调用一个 returns 字符串且不带任何参数的函数,但仍会传入 Integer
值。 VB.NET builds/executes 此代码就像您尝试调用该函数,然后从指定索引处的字符串中获取字符一样。例如:
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
我希望我的构建在这种情况下失败。我试过使用 Option Strict On
和 Option Explicit On
但似乎都没有改变这种行为。
在我的 VB.NET 项目中有没有办法使这种函数调用无效?
创建一个不带参数的重载,它在所有其他方面都是原始函数的副本。
Public Function Foo() As String
Return "Foo"
End Function
现在将 userId 的类型更改为其他类型(不是 Object
或任何数字等)
Public Function Foo(userId As DateTime) As String
Return "Foo"
End Function
由于存在带参数的重载,编译器认为您的意思是调用它,而不是索引字符数组。所以你有编译错误。修复错误
然后删除原来的功能