當我實體化它時,我試圖將一個可選的回呼引數傳遞給我的類。我需要一個回呼方法來格式化一些可能需要也可能不需要格式化的值。
這是我正在嘗試做的簡化代碼:
Public Class ColumnSpec
Property Title As String
Property Name As String
Property Value As String
Delegate Function CallBack(aValue As String) As String
Property HasCallBack As Boolean
Public Sub New(aTitle As String, aName As String, Optional aCallBack As CallBack = Nothing)
_Title = aTitle
_Name = aName
' How do I assign aCallBack to the delegate function here?
_HasCallBack = aCallBack IsNot Nothing
End Sub
End Class
在實體化 ColumnSpec 時,我可能會也可能不會傳遞回呼函式。
在另一堂課中,我需要檢查并致電代表。
Public Class MyClass
Public Function FormatText(Value as String) As String
Return Value "01234" ' Return value after modifying
End Function
Public Function RenderValue() As String
Dim lNewCol1 as ColumnSpec("Title1", "Name2", AddressOf FormatText)
Dim lNewCol2 as ColumnSpec("Title2", "Name2")
' How do I check if there is a delegate and call it?
If lNewCol1.HasCallBack Then lNewCol1.Value = lNewCol1.CallBack(lNewCol1.HasCallBack)
If lNewCol2.HasCallBack Then lNewCol2.Value = lNewCol1.CallBack(lNewCol2.HasCallBack)
End Function
End Class
我對代表完全陌生。關于如何解決這個問題的任何想法?
uj5u.com熱心網友回復:
您的行Delegate Function CallBack(aValue As String) As String僅宣告回呼的型別。您需要一個單獨的屬性或欄位來保存參考。
因此,您將稍微修改該類:
Delegate Function CallbackFunction(aValue As String) As String
Public ReadOnly Property Callback As CallbackFunction
Public ReadOnly Property HasCallback As Boolean
Get
'Alternatively, you could assign the value in the ctor as in your code...
Return Callback IsNot Nothing
End Get
End Property
Public Sub New(Optional aCallback As CallbackFunction = Nothing)
Me.Callback = aCallback
End Sub
您的客戶端代碼可以按原樣進行,無需更改。
如果您不關心回呼函式的命名型別,您也可以使用更新的語法,例如
Public ReadOnly Property Callback As Func(Of String, String)
還相應地修改建構式。
使用此修改,客戶端代碼仍然可以正常作業。
(Action就是Sub這樣Func。Function)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/426217.html
上一篇:如何遍歷json節點的所有鍵
