2012-05-05 26 views
5

Đây là câu hỏi được liên kết với another question I asked before. Tôi có phương thức quá tải:Cách tìm phương pháp quá tải bằng cách phản ánh

public void Add<T>(SomeType<T> some) { } 

public void Add<T>(AnotherType<T> another) { } 

Tôi có thể tìm từng phương pháp bằng cách phản ánh bằng cách nào? ví dụ. Làm thế nào tôi có thể nhận được phương pháp Add<T>(SomeType<T> some) bằng cách phản ánh? Bạn co thể giup tôi được không? Cảm ơn trước.

Trả lời

6

Bí quyết ở đây mô tả rằng bạn muốn tham số là SomeType<T>, trong đó T là loại chung của phương pháp Add.

Ngoài ra, nó chỉ là sử dụng phản chiếu tiêu chuẩn, như CastroXXL được đề xuất trong câu trả lời của anh ấy.

Đây là cách tôi đã làm nó:

var theMethodISeek = typeof(MyClass).GetMethods() 
    .Where(m => m.Name == "Add" && m.IsGenericMethodDefinition) 
    .Where(m => 
      { 
       // the generic T type 
       var typeT = m.GetGenericArguments()[0]; 

       // SomeType<T> 
       var someTypeOfT = 
        typeof(SomeType<>).MakeGenericType(new[] { typeT }); 

       return m.GetParameters().First().ParameterType == someTypeOfT; 
      }) 
    .First(); 
+0

Nó hoạt động. Vì vậy, cảm ơn –

+0

Xin lỗi, một điểm khác. Làm cách nào để phát hiện xem một loại có tuân theo các ràng buộc của kiểu generic không? –

+0

xem nhanh trình gỡ lỗi tại 'typeof (SomeType <>) GetGenericArguments(). Đầu tiên(). GetGenericParameterConstraints()' và xem phương thức 'Type.IsAssignableFrom': http://msdn.microsoft.com/en- chúng tôi/library/system.type.isassignablefrom.aspx Tôi nghĩ rằng việc kết hợp chúng sẽ giúp bạn có được những gì bạn muốn – GolfWolf

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