【发布时间】:2010-04-12 16:54:49
【问题描述】:
我的函数f() 的参数必须实现两个不同的接口,它们之间没有继承关系,IFoo 和IBar。我知道两种不同的方法。首先是声明一个继承自两者的空接口:
public interface IFooBar : IFoo, IBar
{
// nothing to see here
}
public int f(IFooBar arg)
{
// etc.
}
这当然要求类声明自己实现IFooBar 而不是分别实现IFoo 和IBar。
第二种方法是使用约束使f() 泛型:
public int f<T>(T arg) where T : IFoo, IBar
{
// etc.
}
您更喜欢其中哪一个,为什么?各自有什么不明显的优点或缺点吗?
【问题讨论】:
-
Second 更短,更具表现力。
-
我建议使用通用方法。它使实现对象不必知道它的两个接口是一起使用的。