如何确定一个类是否实现了特定的接口
本文关键字:实现 接口 是否 何确定 一个 | 更新日期: 2023-09-27 18:18:07
假设我有一个类似的类
interface ISampleInterface
{
void SampleMethod();
}
class ImplementationClass : ISampleInterface
{
// Explicit interface member implementation:
void ISampleInterface.SampleMethod()
{
// Method implementation.
}
static void Main()
{
// Declare an interface instance.
ISampleInterface obj = new ImplementationClass();
// Call the member.
obj.SampleMethod();
}
}
从main方法中,我如何确定ImplementationClass
类在编写代码之前实现了ISampleInterface
,如下所示
SampleInterface obj = new ImplementationClass();
obj.SampleMethod();
有什么办法吗?请讨论。谢谢。
is
关键字是一个很好的解决方案。您可以测试对象是接口还是其他类。你会做这样的事情:
if (obj is ISampleInterface)
{
//Yes, obj is compatible with ISampleInterface
}
如果在运行时没有对象的实例,而是Type
,则可以使用 IsAssignableFrom:
Type type = typeof(ISampleInterface);
var isassignable = type.IsAssignableFrom(otherType);
您可以使用反射:
bool result = typeof(ISampleInterface).IsAssignableFrom(typeof(ImplementationClass));
public static bool IsImplementationOf(this Type checkMe, Type forMe)
{
foreach (Type iface in checkMe.GetInterfaces())
{
if (iface == forMe)
return true;
}
return false;
}
使用以下方法调用它:
if (obj.GetType().IsImplementationOf(typeof(SampleInterface)))
Console.WriteLine("obj implements SampleInterface");
当您对实现类进行硬编码时,您知道它实现了哪些接口,因此您只需查看源代码或文档即可知道类实现了哪些接口。
如果接收未知类型的对象,则有几种方法可以检查接口的实现:
void Test1(object a) {
var x = a as IMyInterface;
if (x != null) {
// x implements IMyInterface, you can call SampleMethod
}
}
void Test2(object a) {
if (a is IMyInterface) {
// a implements IMyInterface
((IMyInterface)a).SampleMethod();
}
}
一种模式(由FxCop推荐(是
SampleInterface i = myObject as SampleInterface;
if (i != null) {
// MyObject implements SampleInterface
}