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);
6
задан PaN1C_Showt1Me 26 March 2010 в 10:24
поделиться

4 ответа

Чтобы получить общий интерфейс, нужно использовать свойство Name вместо свойства FullName:

MyClass myClass = new MyClass();
Type myinterface = myClass.GetType()
                          .GetInterface(typeof(IMyInterface<int>).Name);

Assert.That(myinterface, Is.Not.Null);
5
ответ дан 17 December 2019 в 02:26
поделиться

Используйте Имя вместо FullName

Введите myinterface = myClass.GetType(). GetInterface(typeof(IMyInterface). Имя);

1
ответ дан 17 December 2019 в 02:26
поделиться
MyClass myc = new MyClass();

if (myc is MyInterface)
{
    // it does
}

или

MyInterface myi = MyClass as IMyInterface;
if (myi != null) 
{
   //... it does
}
0
ответ дан 17 December 2019 в 02:26
поделиться

Почему вы не используете оператор "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
    }
0
ответ дан 17 December 2019 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: