是否可能定义一个函数,该函数接受必须实现两个接口的参数?
(这两个接口只是我记起来的,不是我想要使用的接口)
private void DoSomthing(IComparable, ICollection input)
{
}
是否可能定义一个函数,该函数接受必须实现两个接口的参数?
(这两个接口只是我记起来的,不是我想要使用的接口)
private void DoSomthing(IComparable, ICollection input)
{
}
1)定义一个继承两个必需接口的接口:
public interface ICombinedInterface : IComparable, ICollection {... }
private void DoSomething(ICombinedInterface input) {... }
2) 使用泛型:
private void DoSomething<T>(T input)
where T : IComparable, ICollection
{...}
是的,也不是。
正如Steve所建议的那样,您可以创建另一个第三方接口,其继承了您想要的两个接口,并将其用作参数类型。
然而,这也意味着使用的类还必须实现该第三个接口。
换句话说,以下操作将不起作用:
public interface I1 { }
public interface I2 { }
public class C : I1, I2 { }
public interface I3 : I1, I2 { }
public class YourClass
{
public void Test(I3 i) { }
}
...
YourClass yc = new YourClass();
C c = new C();
yc.Test(c); // won't work, C does not implement I3
然而,你可以通过泛型的方式欺骗编译器,达到你想要的效果。
public class YourClass
{
public void Test<T>(T i) where T: I1, I2 { }
}
现在它应该可以工作了。但我仍不确定这是否会引起其他问题,我需要考虑一下。