2010-05-14 23 views
6

Tôi có một lớp học với một loạt các phương pháp.Tôi sẽ sử dụng phản chiếu như thế nào để gọi tất cả các phương thức có thuộc tính tùy chỉnh nhất định?

một số phương pháp này được đánh dấu bằng thuộc tính tùy chỉnh.

Tôi muốn gọi tất cả các phương pháp này cùng một lúc.

Tôi sẽ sử dụng phản chiếu như thế nào để tìm danh sách tất cả các phương thức trong lớp có chứa thuộc tính này?

Trả lời

7

Khi bạn nhận được danh sách các phương thức, bạn sẽ chu kỳ truy vấn cho các thuộc tính tùy chỉnh bằng phương thức GetCustomAttributes. Bạn có thể cần phải thay đổi các BindingFlags cho phù hợp với tình hình của bạn.

var methods = typeof(MyClass).GetMethods(BindingFlags.Public); 

foreach(var method in methods) 
{ 
    var attributes = method.GetCustomAttributes(typeof(MyAttribute), true); 
    if (attributes != null && attributes.Length > 0) 
     //method has attribute. 

} 
6

Đầu tiên, bạn sẽ gọi typeof(MyClass).GetMethods() để nhận một mảng của tất cả các phương thức được xác định trên loại đó, sau đó bạn lặp lại từng phương thức mà nó trả về và gọi methodInfo.GetCustomAttributes(typeof(MyCustomAttribute), true) để nhận một mảng thuộc tính tùy chỉnh của loại được chỉ định. Nếu mảng có độ dài bằng 0 thì thuộc tính của bạn không nằm trong phương thức. Nếu nó không khác, thì thuộc tính của bạn nằm trên phương thức đó và bạn có thể sử dụng MethodInfo.Invoke() để gọi nó.

Các vấn đề liên quan