2010-09-22 24 views
12

tôi có hai lớp này:rắc rối cách gọi phương pháp tĩnh nhờ sủ dụng phản xạ và C#

Item<T> : BusinessBase<T> where T : Item<T> 
{ 
    public static T NewItem() 
    { 
     //some code here 
    } 
} 
Video : Item <Video> 
{ 

} 

bây giờ tôi muốn gọi NewItem() phương pháp trên lớp video sử dụng phản ánh. khi tôi cố gắng với điều này:

MethodInfo inf = typeof(Video).GetMethod("NewItem", BindingFlags.Static); 

đối tượng inf sau khi thực hiện dòng này vẫn là null. tôi có thể gọi phương thức tĩnh NewItem() trên lớp Video không?

Trả lời

18

Bạn cần specifiy BindingFlags.PublicBindingFlags.FlattenHierarchy ngoài BindingFlags.Static:

MethodInfo inf = typeof(Video).GetMethod("NewItem", 
    BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy); 

Ngoài ra, bạn có thể nhận được các phương pháp từ kiểu khai báo mà không BindingFlags.FlattenHierarchy:

MethodInfo inf = typeof(Item<Video>).GetMethod("NewItem", 
    BindingFlags.Static | BindingFlags.Public); 

Tôi đã thử cả hai cách và cả hai đều hoạt động.

+1

cảm ơn người đàn ông. nó hoạt động. Tôi sẽ chấp nhận câu trả lời của bạn. cảm ơn rất nhiều.. – backdoor

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