在c#中测试对象是否实现给定接口的最简单方法是什么?(回答这个问题 在Java中)
当前回答
@AndrewKennan的答案的一个变体,我最近在运行时获得的类型中使用了:
if (serviceType.IsInstanceOfType(service))
{
// 'service' does implement the 'serviceType' type
}
其他回答
if (object is IBlah)
or
IBlah myTest = originalObject as IBlah
if (myTest != null)
我使用
断言。(myObject是ImyInterface);
在我的单元测试中测试myObject是一个实现了我的接口ImyInterface的对象。
我有这样一种情况,我把一个变量传递给一个方法,不确定它是一个接口还是一个对象。
目标是:
如果item是一个接口,则基于该接口实例化一个对象,该接口是构造函数调用中的参数。 如果项目是一个对象,返回null,因为构造函数为我的调用期望一个接口,我不希望代码坦克。
我通过以下方法做到了这一点:
if(!typeof(T).IsClass)
{
// If your constructor needs arguments...
object[] args = new object[] { my_constructor_param };
return (T)Activator.CreateInstance(typeof(T), args, null);
}
else
return default(T);
除了使用"is"操作符进行测试外,你还可以装饰你的方法,以确保传递给它的变量实现了特定的接口,如下所示:
public static void BubbleSort<T>(ref IList<T> unsorted_list) where T : IComparable
{
//Some bubbly sorting
}
我不确定这是在哪个版本的。net中实现的,所以它可能在你的版本中不起作用。
如果您在编译时就知道接口类型,并且拥有正在测试的类型的实例,那么使用is或作为操作符是正确的方法。其他人似乎没有提到的是类型。IsAssignableFrom:
if( typeof(IMyInterface).IsAssignableFrom(someOtherType) )
{
}
我认为这比查看GetInterfaces返回的数组要简洁得多,而且也具有适用于类的优点。
推荐文章
- 实体框架核心:在上一个操作完成之前,在此上下文中开始的第二个操作
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 在c#代码中设置WPF文本框的背景颜色
- 在c#中,什么是单子?
- c#和Java中的泛型有什么不同?和模板在c++ ?
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何分裂()一个分隔字符串到一个列表<字符串>
- 如何转换列表<字符串>列表<int>?
- c#对象列表,我如何得到一个属性的和