В моем небольшом проекте я использую классы System.Reflection
для создания исполняемого кода. Мне нужно вызвать оператор +
настраиваемого типа. Кто-нибудь знает, как я могу вызвать настраиваемый оператор пользовательского класса с использованием рефлекса С#?
Как вызвать пользовательский оператор с отражением
Ответ 1
Компилятор С# преобразует перегруженный оператор в функции с именем op_XXXX
, где XXXX
- это операция:
operator==
→ op_Equality
operator!=
→ op_Inequality
operator+
→ op_Addition
operator-
→ op_Subtraction
operator<
→ op_LessThan
operator>
→ op_GreaterThan
operator<=
→ op_LessThanOrEqual
operator>=
→ op_GreaterThanOrEqual
и т.д.
Итак, чтобы получить метод operator+
структуры DateTime
, вам нужно написать:
MethodInfo mi = typeof(DateTime).GetMethod("op_Addition",
BindingFlags.Static | BindingFlags.Public );
Ответ 2
typeof(A).GetMethod("op_Addition").Invoke(null, instance1, instance2);
Ответ 3
Считайте, чтобы ваш пользовательский оператор был property
вашего Class
. Затем войдите в property
и value
через reflection
.
как
PropertyInfo pinfo = obj.GetType().GetProperty("CustomOperator", BindingFlags.Public | BindingFlags.Instance);
string customOperator = pinfo.GetValue(obj,null) as string;