首先,需要了解两个基本概念:
现在,假设我们有一个名为Animal
的基类,具有Sound()
方法,并定义了一个名为Dog
的子类和一个名为Cat
的子类。
public class Animal
{
public virtual void Sound()
{
Console.WriteLine("The animal makes a sound");
}
}
public class Dog : Animal
{
public override void Sound()
{
Console.WriteLine("The dog barks");
}
}
public class Cat : Animal
{
public override void Sound()
{
Console.WriteLine("The cat meows");
}
}
现在,我们有两个类Dog
和Cat
,它们都继承自Animal
基类,并重写了Sound()
方法。根据定义,Dog
和Cat
都实现了Animal
接口。
接下来,我们使用IsAssignableFrom
和GetInterface
方法进行测试:
Animal animal = new Dog();
Animal animal2 = new Cat();
Console.WriteLine("Is Dog a Dog? " + animal.GetType().IsAssignableFrom(animal.GetType()));
Console.WriteLine("Is Cat a Dog? " + animal2.GetType().IsAssignableFrom(animal2.GetType()));
Console.WriteLine("Does Dog implement Animal? " + animal.GetType().GetInterface(typeof(Animal).FullName));
Console.WriteLine("Does Cat implement Animal? " + animal2.GetType().GetInterface(typeof(Animal).FullName));
输出结果为:
Is Dog a Dog? True
Is Cat a Dog? False
Does Dog implement Animal? True
Does Cat implement Animal? False
从输出结果可以看出:
animal
和animal2
都是Animal
类型的实例,因为它们都实现了Animal
接口。Dog
类实现了Animal
接口,所以animal
是Dog
类的实例。Cat
类没有实现Animal
接口,所以animal2
不是Cat
类的实例。animal
和animal2
都是Animal
类型的实例,但是它们分别属于不同的类(Dog
和Cat
)。因此,IsAssignableFrom
和GetInterface
方法在判断类或对象是否实现了某个接口时,会给出不同的结果。
领取专属 10元无门槛券
手把手带您无忧上云