Tôi đang viết proxy trang trí bằng cách sử dụng Castle DynamicProxy. Tôi cần đánh chặn của proxy để chặn chỉ sở hữu viết (không đọc) vì vậy tôi đang kiểm tra tên của phương pháp thusly:Xác định xem thể hiện MethodInfo có phải là trình truy cập thuộc tính
public void Intercept(IInvocation invocation)
{
if (invocation.Method.Name.StartsWith("set_")
{
// ...
}
invocation.Proceed();
}
Bây giờ này hoạt động tốt nhưng tôi không thích thực tế proxy của tôi có kiến thức sâu sắc về cách các thuộc tính được triển khai: Tôi muốn thay thế kiểm tra tên phương thức bằng một cái gì đó tương tự như:
if (invocation.Method.IsPropertySetAccessor)
Thật không may là Google-fu của tôi đã thất bại. Bất kỳ ý tưởng?
Trông rất bất tiện – thepirat000
@ thepirat000: Vâng, nếu 'GetSetMethod' là O (1), đây sẽ là O (n). Đó có lẽ không phải là tối ưu (và tôi chắc chắn sẽ upvote bất kỳ câu trả lời thay thế mà là có thể đọc được và mang lại hiệu suất tốt hơn), nhưng tôi chắc rằng bạn biết câu nói về tối ưu hóa sớm là gốc rễ của tất cả các điều ... – Heinzi
Tôi sẽ đề nghị bạn để kiểm tra xem phương thức có tiền tố "get_" (không phân biệt) và loại bỏ nó khỏi bộ sưu tập phương thức (còn O (n) phức tạp - mà là khá rẻ). Ngoài ra, bạn có thể thêm thể hiện 'Dictionary' để giữ các kiểu đã được kiểm tra trước tiên cho bạn độ phức tạp của O (n) nhưng sau đó O (1) –