c# - 将接口(interface)类型作为参数传递

标签 c# interface parameters

我已经知道您可以将接口(interface)作为参数传递给方法。这允许您仅指定方法所需的对象的相关成员。我想做的是能够将接口(interface)类型作为参数传递。

假设我声明了几个接口(interface),这些接口(interface)在一系列对象中实现不均匀,这些对象都形成一个列表/集合。我可以编写一个辅助方法,将列表中的一个对象和一个接口(interface)类型作为参数,并检查该对象是否实现了该接口(interface)吗?下面的代码显然是垃圾,但它说明了我想做的事情:

private bool CheckType(object o, interface intrfce)
{
    try
    {
        object x = (object)(intrfce)o;
        return true;
    }
    catch (InvalidCastException e) 
    {
        return false
    }
}

目前我只是计划为接口(interface)设置枚举,并要求所有类公开它们实现的接口(interface)数组/列表。然后我可以检查枚举列表以查看它们有哪些相关的接口(interface)(我只对我创建的接口(interface)感兴趣 - 我不是在返回 IEnumerableICloneable 等)或者我可以为每个接口(interface)编写辅助方法。我只是想知道是否有更优雅的方法?

最佳答案

你可以使用泛型来做到这一点:

private bool CheckType<T>(object o) {
    return o is T;
}

你可以这样调用它:

foreach (object o in myList) {
    if (CheckType<MyInterface>(o)) {
        ... // Do something
    }
}

考虑到这很容易做到,您不妨在条件本身中进行。

最后,如果您只想处理在混合列表中实现特定接口(interface)的对象,您可以使用 LINQ 的 OfType 方法来实现,如下所示:

foreach (MyInterface o in myList.OfType<MyInterface>()) {
   ...
}

关于c# - 将接口(interface)类型作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24465641/

相关文章:

c# - 尝试获取嵌套在数据模板中的按钮后面的代码

c# - 从 C++ 到 C# : Never Return a Reference to a Local Object?

java - 将功能委托(delegate)给 Java 中的子类

reporting-services - 参数中的 Reporting Services 2008 : Using user! 用户 ID

c# - azure : data storage with append

Java - can-do 接口(interface)的命名约定,而不是 can-be-done-to

java - Gen-Class 不生成 .class 文件

ios - 将参数从 sudzC ios 传递给 java webservice 始终为 null

Java函数参数值正在改变

C# 关闭或覆盖重复的监视器