Большой специалист по .NET может исправить меня, если я ошибаюсь, но я не верю, что это возможно.Внутренне я считаю, что .NET Framework на самом деле не поддерживает эту иерархию, и она сглаживается, когда она компилируется в код IL.
Например, код C #:
class Program : I2
{
static void Main(string[] args)
{
}
}
interface I1
{
}
interface I2 : I1
{
}
Послеон встроен в код IL, это:
.class private auto ansi beforefieldinit ReflectionTest.Program
extends [mscorlib]System.Object
implements ReflectionTest.I2,
ReflectionTest.I1
{
...
Что в точности совпадает с class Program : I1, I2
Однако, также в IL есть:
.class interface private abstract auto ansi ReflectionTest.I2
implements ReflectionTest.I1
{
...
Это означает, что вы могли бы написать некоторую логику для получения (из моего примера) I1
и I2
из класса Program
, а затем запросить каждый из этих интерфейсов, чтобы выяснить, реализуют ли они один из других ..Другими словами, поскольку typeof(I2).GetInterfaces()
содержит I1
, вы можете сделать вывод, что, поскольку typeof(Program).GetInterfaces()
возвращает I1
и I2
, то Program
может напрямую не наследовать I1
вcode.
Подчеркну, что может и не , потому что это также допустимый код C # и будет иметь тот же код IL (а также те же результаты отражения):
class Program : I1, I2
{
static void Main(string[] args)
{
}
}
interface I1
{
}
interface I2 : I1
{
}
Теперь Program
прямо и косвенно наследует I1
...