是否有可能有任何類型的參數?這就是我的意思:vb.net無類型參數
some_function(argument)
if (argument type is string)
do something with a string
else if (argument type is datarow)
do something with a data row
...
我發現了一些關於泛型,但我不知道是否它是我想要的。
是否有可能有任何類型的參數?這就是我的意思:vb.net無類型參數
some_function(argument)
if (argument type is string)
do something with a string
else if (argument type is datarow)
do something with a data row
...
我發現了一些關於泛型,但我不知道是否它是我想要的。
你完全可以像下面這樣做:
Sub DoSomething(ByVal arg As Object)
If TypeOf arg Is TypeX Then
DoSomethingX(DirectCast(arg, TypeX)
ElseIf TypeOf arg Is TypeY Then
DoSomethingY(DirectCast(arg, TypeY))
End If
End Sub
但:至少第一問自己如果你想要做什麼真的應該用繼承和多態來完成。
這是一個大詞基本上是這樣的:
Public MustInherit Class BaseType
Public MustOverride Sub DoSomething()
End Class
Public Class TypeX
Inherits BaseType
Public Overrides Sub DoSomething()
' Whatever TypeX does. '
End Sub
End Class
Public Class TypeY
Inherits BaseType
Public Overrides Sub DoSomething()
' Whatever TypeY does. '
End Sub
End Class
它看起來像很多打字的,但後來在路上任何時候你有,而不是一堆BaseType
類型的對象,If
/ElseIf
檢查,你只是這樣做:
arg.DoSomething()
可能不是你的情況的解決方案。只是想指出這是存在的,並且可能是可以更好地解決您的問題(很難說沒有細節)。
繼承會很好,當然,但我不能這樣做。感謝這個例子! – 2010-09-06 07:47:41
更好地使用重載,而不是'TypeOf Is'?正如我的回答:) – MarkJ 2010-09-07 10:56:56
@MarkJ:如果參數在代碼中輸入爲「Object」,則不起作用。 – 2010-09-10 19:43:30
一種方法是你可以使用基類型。將參數設置爲Object。
some_function(argument as Object)
if (argument type is string)
do something with a string
else if (argument type is datarow)
do something with a data row
我想這是個好主意,因爲我只會傳入對象後代類型。我現在需要的只是一種檢查類型和投射對象的方式,但這是谷歌應該幫助我的,因此非常感謝提示。 – 2010-09-06 07:34:09
只需使用overloading。創建具有相同名稱但不同參數列表的方法。 Visual Basic .NET根據您傳遞的參數類型指出在編譯過程中要調用的方法。
Sub some_function(ByVal argument As String)
End Sub
Sub some_function(ByVal argument As DataRow)
End Sub
然後請描述你想要的,所以人們可以給你一個體面的解決方案,實際上適合真正的問題。 – 2010-09-06 07:22:19
我想我已經描述得很清楚了。我需要一種方法來接受一個無類型的參數並動態地找到它的類型。什麼不明確? – 2010-09-06 07:27:21