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
18
A
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
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 property
và value
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);
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? –
@ Ş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. –
Và quy tắc đặt tên cho các toán tử đúc là gì? – Grx70