在c#中测试对象是否实现给定接口的最简单方法是什么?(回答这个问题 在Java中)
当前回答
除了使用"is"操作符进行测试外,你还可以装饰你的方法,以确保传递给它的变量实现了特定的接口,如下所示:
public static void BubbleSort<T>(ref IList<T> unsorted_list) where T : IComparable
{
//Some bubbly sorting
}
我不确定这是在哪个版本的。net中实现的,所以它可能在你的版本中不起作用。
其他回答
最近我试着用安德鲁·凯南的答案,但出于某种原因,它对我不起作用。我使用了这个方法,并且它有效(注意:可能需要写入名称空间)。
if (typeof(someObject).GetInterface("MyNamespace.IMyInterface") != null)
if (object is IBlah)
or
IBlah myTest = originalObject as IBlah
if (myTest != null)
interface IItem
{
}
class ItemImp : IItem
{
}
class Program
{
static void Main(string[] args)
{
Type t = typeof(ItemImp);
Console.WriteLine("t == typeof(IItem) -> {0}", t == typeof(IItem));
Console.WriteLine("typeof(IItem).IsAssignableFrom(t) -> {0}", typeof(IItem).IsAssignableFrom(t));
Console.WriteLine("t is IItem -> {0}", t is IItem);
Console.WriteLine("new ItemImp() is IItem -> {0}", new ItemImp() is IItem);
}
}
// Here are outputs:
// t == typeof(IItem) -> False
// typeof(IItem).IsAssignableFrom(t) -> True
// t is IItem -> False
// new ItemImp() is IItem -> True
如果你想在检查后使用类型转换对象: 从c# 7.0开始:
if (obj is IMyInterface myObj)
这和
IMyInterface myObj = obj as IMyInterface;
if (myObj != null)
参见.NET文档:模式匹配概述
例如:
if (obj is IMyInterface) {}
本课程:
检查typeof(MyClass). 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#对象列表,我如何得到一个属性的和