2011-10-21 42 views
6

Có cách nào (phản ánh hay cách khác) để lập trình xác định rằng giao diện IList yêu cầu ICollection, do đó yêu cầu IEnumerable?Tôi có thể xác định yêu cầu giao diện/phụ thuộc/kế thừa kế thừa không?

Tôi đang làm việc theo số reflection library và gặp phải một tình huống mà tôi có thể sử dụng thông tin này nhưng không tìm được cách nào để có được thông tin đó. Cả trình biên dịch lẫn IDE (rõ ràng) đều biết mối quan hệ, vì vậy nó phải có sẵn bằng cách nào đó.

Tôi hy vọng các đề xuất không liên quan đến phân tích cú pháp nguồn hoặc IL, không thực sự là tùy chọn cho trường hợp sử dụng của tôi.

+0

đối tượng COM có thể thực hiện việc này. – VoidStar

Trả lời

4

Bạn có thể sử dụng Type.GetInterfaces để khám phá thông tin này.

+0

Doh! Cảm ơn, chỉ cho thấy nhanh như thế nào bạn có thể đi về quên một cái gì đó nếu bạn không làm việc với nó trong một thời gian :) –

+0

Thực ra, có vẻ như đệ quy thậm chí không cần thiết (tôi nhận được một mảng với tất cả các giao diện yêu cầu). –

+0

@MortenMertner: ... xác nhận nhận xét đầu tiên của bạn một lần nữa :-) – Jon

1

Các ví dụ dưới đây trong PowerShell:

PS C:\> [collections.ilist].getinterfaces() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  False ICollection 
True  False IEnumerable 

Tương đương trong C# sẽ là: typeof(IList).GetInterfaces().

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