Tôi đang cố gắng thực hiện một truy vấn trên các giao diện của một lớp thông qua sự phản chiếu, tuy nhiên phương thức Type.GetInterfaces() trả về tất cả các giao diện kế thừa.Chỉ tìm giao diện không được kế thừa?
vv
public class Test : ITest { }
public interface ITest : ITesting { }
Mã
typeof(Test).GetInterfaces();
sẽ trả về một Type[]
chứa cả ITest
và ITesting
, nơi như tôi chỉ muốn ITest
, là có một phương pháp cho phép bạn chỉ định thừa kế?
Cảm ơn, Alex.
EDIT: Từ các câu trả lời dưới đây tôi thu thập được này,
Type t;
t.GetInterfaces().Where(i => !t.GetInterfaces().Any(i2 => i2.GetInterfaces().Contains(i)));
dường như ở trên để làm việc, chính xác cho tôi trong các ý kiến nếu nó không
Điều gì xảy ra nếu nó là 'lớp công khai Kiểm tra: ITest, ITesting'? Tại sao bạn muốn điều này? – SLaks
Bởi vì tôi muốn biết giao diện nào của lớp được kế thừa trực tiếp? và không phải là giao diện mà nó được kế thừa từ gián tiếp, để tạo động các kiểu mới. Liệu nó có quan trọng không? –
Nói đúng, bạn không * kế thừa * giao diện, bạn * thực hiện * chúng, do đó, lớp 'Kiểm tra' đang cung cấp việc triển khai' ITest' và 'ITesting' trong trường hợp này. Thực tế là 'ITest'" thừa hưởng "từ' ITesting' đơn giản có nghĩa là bất kỳ kiểu nào thực hiện 'ITest' cũng phải cung cấp một sự thực thi' ITesting'. – LukeH