Nel mio piccolo progetto sto usando le classi System.Reflection
per produrre codice eseguibile. Devo chiamare l'operatore +
di un tipo personalizzato. Qualcuno sa come posso chiamare l'operatore personalizzato della classe personalizzata usando la riflessione C#?Come chiamare un operatore personalizzato con Reflection
18
A
risposta
22
C# compilatore converte sovraccarico all'operatore di funzioni con nome op_XXXX
dove XXXX
è l'operazione:
operator==
->op_Equality
operator!=
->op_Inequality
operator+
->op_Addition
operator-
->op_Subtraction
operator<
->op_LessThan
operator>
->op_GreaterThan
operator<=
->op_LessThanOrEqual
operator>=
->op_GreaterThanOrEqual
e così via.
Quindi, per recuperare il metodo del DateTime
struct operator+
, è necessario scrivere:
MethodInfo mi = typeof(DateTime).GetMethod("op_Addition",
BindingFlags.Static | BindingFlags.Public);
1
Considera di rendere il tuo operatore personalizzato come property
del tuo Class
. E quindi accedere allo property
e al suo value
tramite reflection
.
come
PropertyInfo pinfo = obj.GetType().GetProperty("CustomOperator", BindingFlags.Public | BindingFlags.Instance);
string customOperator = pinfo.GetValue(obj,null) as string;
6
typeof(A).GetMethod("op_Addition").Invoke(null, instance1, instance2);
Solo curioso :) Che cosa succede se ho un metodo statico 'op_Addition' con la stessa firma? –
@ ŞafakGür Quindi riceverai un errore del compilatore che dice "Tipo '' definisce già un membro chiamato 'op_Addition' con gli stessi tipi di parametri". Poiché il metodo operatore definito viene rinominato esattamente con il nome sopracitato, non è possibile avere entrambi nella stessa classe. –
E quale sarebbe la regola di denominazione per gli operatori di casting? – Grx70