In python
è possibile implementare function decorators
per estendere il comportamento di funzioni e metodi.Decoratori del metodo di implementazione in C#
In particolare sto migrando una lib di dispositivo da python
a C#
. La comunicazione con il dispositivo può generare errori che dovrebbero essere controrilanciati con un'eccezione personalizzata.
In python
avrei scritto così:
@device_error_wrapper("Device A", "Error while setting output voltage.")
def set_voltage(self, voltage):
"""
Safely set the output voltage of device.
"""
self.__handle.write(":source:voltage:level {0}".format(voltage))
Questa chiamata di metodo si espanderebbe a
try:
self.__handle.write(":source:voltage:level {0}".format(voltage))
except Error:
raise DeviceError("Error while setting output voltage.", "DeviceA")
Con questo modello si può facilmente avvolgere ed estendere i metodi senza dover scrivere ogni try-except
clausola ogni metodo
E 'possibile implementare un modello simile usando C#
?
Se è necessaria l'implementazione del decoratore (device_error_wrapper
), informare.
un'alternativa che conosco sta usando delegati (ad esempio in questa risposta http: // stackoverflow.com/questions/7384228/how-can-i-avoid-duplicated-try-catch-blocks) oppure potresti provare postsharp (citato anche in una delle risposte). Se è davvero possibile utilizzare attributi come decoratori di metodi per questo scopo, non lo so (ne dubito, ma scommetto che qualcuno risponderà per te). – bas