我正在使用一个涉及参数传递的过程,并且传递的参数是一个变量。因为我已经明确声明了另一个参数的数据类型,所以我需要对这个做同样的事情。我将参数声明为什么数据类型,就好像它是一个变量一样?谢谢
2 回答
你正在做什么以及你正在处理什么类型的一个例子会很好。您可以实现Overloading
以提供不同的参数类型:
Friend Function FooBar(n As Integer) As Integer
Friend Function FooBar(n As Int64) As Integer
Friend Function FooBar(n As Short) As Integer
编译器将选择与传递的数据类型匹配的函数。在内部,他们可能会根据传递的类型做任何事情,然后调用另一个过程来执行他们所有人共有的任何事情。
您需要使用它的类型可能有限。例如Font
,Point
并且Rectangle
可能没有任何意义。EvenDate
是可疑的,因为您不能以与 Int 或 Long 相同的方式对日期进行处理。 String
也不太可能需要,因为您始终可以传递它,因为FooBar(CInt(someString))
它确实包含有效的整数或其他任何东西。
您还可以使用泛型来告诉函数您传递的是什么:
Private Function FooBar(Of T)(parm As T) As Integer
' called as:
ziggy = FooBar(Of Int32)(n)
zoey = FooBar(Of String)(str)
Private Function FooBar(Of T)(parm As T) As T
如果函数返回取决于Type
传递的参数,甚至可能会出现这种情况。这有很多用途(其中一个是避免将参数传递为Object
),但作为传递任何类型的通用方法,这不是一个好主意:在内部,您可能必须有一个大的 If/Else以自己的方式处理不同的类型。
永远不建议关闭Option Strict
,因为可能会发生各种不需要的类型转换。
在 VB.NET 中,您可以使用 Object 作为类型,但 Option Strict Off。在这种情况下,您可以传递任何类型的参数。有关更多信息,请参阅:https ://stackoverflow.com/a/2890023/3660930