Desidero aggiungere una funzione di richiamata comune a tutti i metodi di un oggetto. Ho trovato this SO question ma in quell'approccio dovevo modificare ogni funzione della classe. Vorrei definire qualche metodo beforeFilter
che viene troncato prima di ogni chiamata di metodo. So che potrei usare Action delegates
per quello ma non so come.Come aggiungere una richiamata a un modulo Web Progetto
UPDATE: Per fare un esempio, quello che voglio sarebbe qualcosa di simile
Class MyClass
Sub MyCallback
'callback code...
End Sub
'Rest of tyhe code
End Class
Come si può vedere, l'ideale sarebbe di aggiungere un metodo semplice (più di uno o) per ottenere trigered prima di tutto il resto dei metodi. Forse con qualche classe base o un'interfaccia, non lo so (è per questo che chiedo).
Un'altra opzione che penso possa essere possibile è quella di clonare l'oggetto e definire una nuova classe invece di aggiungere codice a quello esistente. Quindi, in questo Class
utilizzare il Object
per ottenere l'accesso ai metodi trhough la Type
Class NewClass
Sub AddCallback(Obj As Object, Callback As Action)
'Add the callback here
End Sub
End Class
sto solo indovinare, magari un po 'della mia opzione sono anche impraticabile, quindi si prega di aiutare la mia su questo
più vicino avvicinarsi
Quello che ho per ora, è questo metodo
Sub RunWithCallback(beforFilter As Action, f As Action)
beforeFilter()
f()
End Sub
(Ciò significa un sacco di sovraccarichi per il RunWithCallback
per gestire Sub e Funzioni con i delegati Action
e Func
s, con un numero diverso di parametri) Per utilizzare questo, dovrei eseguire questo Sub invece di chiamare uno dei metodi Object (passando il parametro ByRef
per recuperare il valore di ritorno nelle funzioni). Qualcosa di simile
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)
penso che ci dovrebbe essere una soluzione migliore a questo, cosa che permette di evitare di chiamare lo stesso sub, ed evitare i sovraccarichi, una sorta di metodo di estensione dinamica per l'oggetto Class
Alcuni codici di esempio potrebbero essere utili, così come è molto poco chiaro quello che vuoi.Ad esempio, si suppone che 'beforeFilter' venga chiamato prima del metodo è invocato o at inizia di ogni metodo? Un delegato di 'Action' richiederà comunque il refactoring, quindi non sembra che sia quello che vuoi. – Plutonix
Controlla la mia modifica, se hai ancora dubbi, commenta di nuovo. –
Se 'MyCallback' è in' MyClass' e invocato da 'MyClass' perché la classe non è in grado di invocarlo (non è come un 'callback'). È più comune usare un delegato (non necessariamente 'Action') quando un metodo * non * ha accesso a un metodo che si desidera utilizzare * da qualche altra parte *. Ad esempio, 'ClassA.DoFoo' è invocato da ClassB e nel corso di' DoFoo' è necessario richiamare 'ClassB.GetBar'. – Plutonix