2012-06-20 26 views
18

Trong dự án nhỏ của tôi, tôi đang sử dụng các lớp System.Reflection để tạo mã thực thi. Tôi cần gọi nhà điều hành + của một loại tùy chỉnh. Có ai biết làm thế nào tôi có thể gọi điều hành tùy chỉnh của lớp tùy chỉnh bằng cách sử dụng C# phản ánh?Cách gọi nhà điều hành tùy chỉnh với Reflection

Trả lời

22

biên dịch C# chuyển quá tải vận hành chức năng với tên op_XXXX nơi XXXX là hoạt động:

operator== ->op_Equality
operator!= ->op_Inequality
operator+ ->op_Addition
operator- ->op_Subtraction
operator< ->op_LessThan
operator> ->op_GreaterThan
operator<= ->op_LessThanOrEqual
operator>= ->op_GreaterThanOrEqual
và vân vân.

Vì vậy, để lấy phương pháp operator+ của DateTime struct, bạn cần phải viết:

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

Chỉ cần tò mò :) Nếu tôi có một 'op_Addition' phương pháp tĩnh đối với ký giống nhau không? –

+1

@ ŞafakGür Sau đó, bạn sẽ nhận được một lỗi trình biên dịch nói rằng "Type" 'đã định nghĩa một thành viên được gọi là' op_Addition 'với các kiểu tham số tương tự ". Bởi vì phương thức toán tử đã định nghĩa được đổi tên chính xác thành tên đã nói ở trên, bạn không thể có cả hai trong cùng một lớp. –

+0

Và quy tắc đặt tên cho các toán tử đúc là gì? – Grx70

1

Cân nhắc đặt toán tử tùy chỉnh của bạn thành property trong số Class. Và sau đó truy cập vào propertyvalue của chúng tôi thông qua reflection.

như

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);