我想添加一個通用的回調函數到一個對象的所有方法。我發現this SO question,但在這個問題上,我不得不修改班級的每個功能。我想定義一些在每次方法調用之前都被觸發的beforeFilter
方法。我知道我可以使用Action delegates
,但我不知道如何。如何添加一個回調到webform項目
UPDATE:作爲一個例子,我想會是這樣的
Class MyClass
Sub MyCallback
'callback code...
End Sub
'Rest of tyhe code
End Class
正如你所看到的,理想的做法是添加一個簡單的(或多個)方法來得到trigered在所有其他方法之前。也許有一些基類或接口,我不知道(這就是爲什麼我要求)。
我認爲它可能是可行的一些其他選項是克隆該對象並定義一個新類,而不是將代碼添加到現有的代碼。因此,在這種Class
使用Object
以訪問trhough的Type
Class NewClass
Sub AddCallback(Obj As Object, Callback As Action)
'Add the callback here
End Sub
End Class
方法我只是猜測,也許我的一些選項甚至是不可行的,所以請幫助我對這個
最近接近
我有現在,是該方法
Sub RunWithCallback(beforFilter As Action, f As Action)
beforeFilter()
f()
End Sub
(這意味着RunWithCallback
負責管理Sub和函數的過載很多,Action
s和Func
的代表具有不同數量的參數)爲了使用它,我必須運行此Sub而不是調用任何Object方法(通過ByRef
參數捕獲函數中的返回值)。事情是這樣的
Public Sub DoNothing()
Debug.WriteLine("Callback working!")
End Sub
Public Sub BeforeFilter()
Debug.WriteLine("Testing callback...")
End Sub
'To run the above function
RunWithCallback(AddressOf BeforeFilter, AddressOf DoNothing)
我覺得應該有一個更好的解決這一點,一些允許避免調用同一子,並避免過載,某種動態擴展方法的對象類
一些示例代碼可能是有用的,因爲它很不清楚你想要什麼,例如,'beforeFilter'應該在方法之前被調用被調用或在t他開始每種方法?一個'Action'委託將仍然需要重構,所以看起來並不像你想要的那樣。 – Plutonix
檢查我的編輯,如果您仍有疑問,請再次評論。 –
如果'MyCallback'在'MyClass'中並且從'MyClass'中調用,爲什麼類不能調用它(這不像'回調')。當一個方法*不能訪問你想從其他地方使用的方法*時,更常見的是使用一個委託(不一定是'Action')。例如,'ClassA.DoFoo'是從ClassB調用的,在'DoFoo'的過程中,您需要它調用'ClassB.GetBar'。 – Plutonix