tag see remarks method generate example documentacion cref comentarios c# reflection operator-overloading operators system.reflection

c# - see - Cómo llamar a un operador personalizado con Reflection



see cref c# (3)

Considere hacer su operador personalizado como property de su Class . Y luego acceder a la property y su value través de la reflection .

me gusta

PropertyInfo pinfo = obj.GetType().GetProperty("CustomOperator", BindingFlags.Public | BindingFlags.Instance); string customOperator = pinfo.GetValue(obj,null) as string;

En mi pequeño proyecto estoy usando clases de System.Reflection para producir código ejecutable. Necesito llamar al operador + de un tipo personalizado. ¿Alguien sabe cómo puedo llamar a un operador personalizado de clase personalizada usando C # reflexión?


El compilador de C # convierte el operador sobrecargado en funciones con el nombre op_XXXX donde XXXX es la operación. Por ejemplo, el operator + se compila como op_Addition .

Aquí está la lista completa de operadores recargables y sus respectivos nombres de métodos:

┌──────────────────────────┬───────────────────────┬──────────────────────────┐ │ Operator │ Method Name │ Description │ ├──────────────────────────┼───────────────────────┼──────────────────────────┤ │ operator + │ op_UnaryPlus │ Unary │ │ operator - │ op_UnaryNegation │ Unary │ │ operator ++ │ op_Increment │ │ │ operator -- │ op_Decrement │ │ │ operator ! │ op_LogicalNot │ │ │ operator + │ op_Addition │ │ │ operator - │ op_Subtraction │ │ │ operator * │ op_Multiply │ │ │ operator / │ op_Division │ │ │ operator & │ op_BitwiseAnd │ │ │ operator | │ op_BitwiseOr │ │ │ operator ^ │ op_ExclusiveOr │ │ │ operator == │ op_Equality │ │ │ operator != │ op_Inequality │ │ │ operator < │ op_LessThan │ │ │ operator > │ op_GreaterThan │ │ │ operator <= │ op_LessThanOrEqual │ │ │ operator >= │ op_GreaterThanOrEqual │ │ │ operator << │ op_LeftShift │ │ │ operator >> │ op_RightShift │ │ │ operator % │ op_Modulus │ │ │ implicit operator <type> │ op_Implicit │ Implicit type conversion │ │ explicit operator <type> │ op_Explicit │ Explicit type conversion │ │ operator true │ op_True │ │ │ operator false │ op_False │ │ └──────────────────────────┴───────────────────────┴──────────────────────────┘

Así que para recuperar el método operator+ de la estructura DateTime , necesita escribir:

MethodInfo mi = typeof(DateTime).GetMethod("op_Addition", BindingFlags.Static | BindingFlags.Public );


typeof(A).GetMethod("op_Addition").Invoke(null, instance1, instance2);