c# - 是否可以声明一个接收 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);
解决方案
如果您确实需要Type
as 参数,请将您的方法设为私有并添加
public void Foo<T>() where T : IFoo
{
Foo(typeof(T));
}
并称它为
Foo<MyType>();
显然,这需要在编译时知道类型。如果不是这种情况,您只能按照评论中的建议进行运行时检查:
if (!typeof(IFoo).IsAssingableFrom(fooType)) throw AnySuitableException();
推荐阅读
- c# - 多线程和异步同时进行
- c# - 使用 Draggable UI 对象扩展滚动视图
- if-statement - 谷歌表格:如何触发随机功能?
- javascript - 时刻时差不会使用时刻时区,但用户计算机时间
- email - 我需要帮助“sudo pip3 install email”
- c# - 非静态类中私有静态变量的范围
- android - FusedLocationApi 连接后如何获取位置?
- google-app-engine - 将 Google Cloud App Engine 上的 Node.js 应用程序连接到 Google Cloud SQL 实例
- c# - 如何引用然后将数据插入到在数据库中自动创建的关联实体中?
- python - 如何使用 rplidar 和 hector-slam/hector-mapping 找到障碍物?