2011-02-08 38 views
5

Tôi tò mò liệu có ai đã viết bất kỳ mã nào để phản ánh vào một lớp học và tìm phương pháp không được chấp nhận của nó không?Sử dụng Phản ánh để tìm phản đối

Ive đã bỏ qua một mẫu T4 để phản ứng và muốn dừng việc tạo trình xử lý cho các sự kiện không được chấp nhận, bất kỳ tin tặc thông minh nào đã đánh tôi vào cú đấm?

+0

Bạn đang sử dụng phản chiếu với T4? Đây là [không khuyến khích] (http://www.olegsych.com/2007/12/how-to-use-t4-to-generate-decorator-classes/). – Ani

+0

Bạn có nghĩa là các thành viên được đánh dấu là lỗi thời (là một phần của khung phản ứng?) – RQDQ

+0

Sửa đổi một mẫu T4 để tạo ra các quan sát trong các đại biểu giao diện người dùng và nó sẽ nhận các sự kiện không được chấp nhận, tôi chỉ cần lọc chúng ra lúc tạo. –

Trả lời

8

Tôi không biết liệu bạn có yêu cầu khung t4 hay không nhưng đây là mẫu phản chiếu chung cho các phương pháp bị gắn cờ cũ.

class TestClass 
{ 
    public TestClass() 
    { 
     DeprecatedTester.FindDeprecatedMethods(this.GetType()); 
    } 

    [Obsolete("SomeDeprecatedMethod is deprecated, use SomeNewMethod instead.")] 
    public void SomeDeprecatedMethod() { } 

    [Obsolete("YetAnotherDeprecatedMethod is deprecated, use SomeNewMethod instead.")] 
    public void YetAnotherDeprecatedMethod() { } 

    public void SomeNewMethod() { }   
} 

public class DeprecatedTester 
{ 
    public static void FindDeprecatedMethods(Type t) 
    { 
     MethodInfo[] methodInfos = t.GetMethods(); 

     foreach (MethodInfo methodInfo in methodInfos) 
     { 
      object[] attributes = methodInfo.GetCustomAttributes(false); 

      foreach (ObsoleteAttribute attribute in attributes.OfType<ObsoleteAttribute>()) 
      { 
       Console.WriteLine("Found deprecated method: {0} [{1}]", methodInfo.Name, attribute.Message); 
      } 
     } 
    } 
} 
+1

Sự hoàn hảo, cảm ơn bạn thân. –

+0

bạn được chào đón. – HuseyinUslu

+5

Nhân tiện, GetCustomAttributes() bị quá tải và có thể lấy tham số kiểu. Vì vậy, để kiểm tra xem một phương thức không được chấp nhận, bạn chỉ cần chuyển 'typeof (ObsoleteAttribute)'. Bộ kiểm tra tôi đang sử dụng (cho các giá trị enum) là: 'return obj.GetType(). GetField (obj.ToString()). GetCustomAttributes (typeof (System.ObsoleteAttribute), true) .Length> 0;' – piojo

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