Это работает для вас?
using System;
namespace Demo
{
interface IOne { }
class Zero { }
class One : IOne { }
class Two : One { }
class Three : Zero, IOne { }
public static class TypeExt
{
public static bool IsSubInterface(this Type t1, Type t2)
{
if (!t2.IsAssignableFrom(t1))
return false;
if (t1.BaseType == null)
return true;
return !t2.IsAssignableFrom(t1.BaseType);
}
}
class Program
{
static void Main()
{
Console.WriteLine(typeof(Three).IsSubInterface(typeof(IOne)));
Console.WriteLine(typeof(Two).IsSubInterface(typeof(IOne)));
}
}
}
Если тип не реализует t2
, то ответ всегда будет false
.
Если тип не имеет базового класса, нореализует t2
, тогда это должен быть реализующий класс, поэтому ответ верен.
Если тип реализует t2
, имеет базовый класс, и этот базовый класс не реализует t2
, тогдаответ true
.
В противном случае ответ ложный.
Это может работать не во всех случаях;вопрос: работает ли он для тех случаев, для которых вы хотите, чтобы он работал?
ОДНАКО: Я не уверен, что это проектный маршрут, по которому вы хотите пойти.Это кажется немного хакерским.Я согласен с комментарием / u / Damien_The_Unbeliever выше.