首页 > 解决方案 > 是否可以声明一个接收 Type 参数的方法,该参数仅限于 C# 中的特定接口?

问题描述

如果我有方法签名

public void Foo(Type fooType)
{
   //...
}

和一个接口IFoo,我可以定义上述限制Type接收到的方法IFoo吗?简而言之,我想知道是否可以防止以这种方式调用该方法,例如:

Foo(typeof(int));

是否可以限制Type为特定的接口实现?

笔记

需要明确的是,在 Java 中,我会声明这样的方法

public void Foo(Class<? extends IFoo> fooType)

并且会用

Foo(SomeFoo.class);

标签: c#

解决方案


如果您确实需要Typeas 参数,请将您的方法设为私有并添加

public void Foo<T>() where T : IFoo
{
    Foo(typeof(T));
}

并称它为

Foo<MyType>();

显然,这需要在编译时知道类型。如果不是这种情况,您只能按照评论中的建议进行运行时检查:

if (!typeof(IFoo).IsAssingableFrom(fooType)) throw AnySuitableException();

推荐阅读