В моем небольшом проекте я использую классы 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;