C# Как проверить, реализует ли класс универсальный интерфейс?
Как получить общий тип интерфейса для экземпляра ?
предположим, что этот код:
interface IMyInterface<T>
{
T MyProperty { get; set; }
}
class MyClass : IMyInterface<int>
{
#region IMyInterface<T> Members
public int MyProperty
{
get;
set;
}
#endregion
}
MyClass myClass = new MyClass();
/* returns the interface */
Type[] myinterfaces = myClass.GetType().GetInterfaces();
/* returns null */
Type myinterface = myClass.GetType().GetInterface(typeof(IMyInterface<int>).FullName);
4 ответов
чтобы получить общий интерфейс, вам нужно использовать имя свойство вместо имя свойства:
MyClass myClass = new MyClass();
Type myinterface = myClass.GetType()
.GetInterface(typeof(IMyInterface<int>).Name);
Assert.That(myinterface, Is.Not.Null);
использовать имя вместо FullName
Введите myinterface = myClass.метод GetType.)(GetInterface(typeof (IMyInterface).имя);
MyClass myc = new MyClass();
if (myc is MyInterface)
{
// it does
}
или
MyInterface myi = MyClass as IMyInterface;
if (myi != null)
{
//... it does
}
почему вы не используете оператор "is"? Проверьте это:
class Program
{
static void Main(string[] args)
{
TestClass t = new TestClass();
Console.WriteLine(t is TestGeneric<int>);
Console.WriteLine(t is TestGeneric<double>);
Console.ReadKey();
}
}
interface TestGeneric<T>
{
T myProperty { get; set; }
}
class TestClass : TestGeneric<int>
{
#region TestGeneric<int> Members
public int myProperty
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
#endregion
}