C#:需要实现两个接口(interface)的参数的函数的首选模式

标签 c# interface generics

<分区>

我的函数 f() 的参数必须实现两个通过继承彼此不相关的不同接口(interface),IFooIBar .我知道有两种不同的方法可以做到这一点。第一种是声明一个继承自两者的空接口(interface):

public interface IFooBar : IFoo, IBar
{
    // nothing to see here
}

public int f(IFooBar arg)
{
    // etc.
}

当然,这要求这些类将自己声明为实现 IFooBar,而不是分别实现 IFooIBar

第二种方法是使 f() 具有约束条件:

public int f<T>(T arg) where T : IFoo, IBar
{
    // etc.
}

你更喜欢哪一个,为什么?两者有什么不明显的优点或缺点吗?

最佳答案

第二个选项更灵活。通过引入一个新接口(interface),您将强制类实现第三个接口(interface),这只有在它们引用您的库(定义接口(interface)的地方)时才有可能。

通过使用通用约束,该类只需要引用包含 IFooIBar 的库,而不是 IFooBar

关于C#:需要实现两个接口(interface)的参数的函数的首选模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2623805/

相关文章:

c# - 以编程方式更改 defaultproxy 而不是使用 app.config

c# - 按钮背景色

c# - 列表页面使用 Ajax 还是不使用 Ajax

syntax - F# 中 Item 属性的类型

java - 通配符和一个实现两个接口(interface)的类的问题

java - 泛型方法继承

c# - log4net 创建日志文件但不写入

c++ - 如何在基类中使用接口(interface)?

c++ - MISRA C++ 规则 14-5-1:(不要在关联的命名空间中声明泛型函数)是否适用于 std::operator<<?

Swift 泛型与任何泛型