ISet如何有两个Add(T项)方法,它们只因返回类型而异
本文关键字:返回类型 方法 ISet Add 两个 | 更新日期: 2023-09-27 18:23:53
我知道我不能重载返回类型(我想我知道这一点)。
void F()
{
}
bool F()
{
return true;
}
产生错误already defines a member called 'F' with the same parameter types
然而,我正在阅读MSDN中的ISet文档,我想我看到了两个Add方法,它们只因返回类型而异。
这是怎么回事?
第一个"Add"方法实际上是继承的ICollection<T>.Add
。
当这在类中实现时,需要显式实现两个Add
方法中的至少一个,即:
void ICollection<T>.Add(T item)
{
// ... Implement here
另一个Add
方法是显式实现的接口方法。
当一个接口方法被显式实现时,如果不首先强制转换对接口类型的引用,就无法调用它,这使得调用不明确,因此拥有多个具有相同签名的方法是可以的。
要在代码中做到这一点,您可以这样做,例如
class MyCollection<T> : ICollection<T> {
public void Add() { ... }
void ICollection<T>.Add() { ... }
}
当您希望接口方法与其他方法做一些稍微不同的事情时,这就避免了必须使用备用方法名称来避免与接口名称发生冲突。
接口方法可以显式实现,如下所示:
public class Something : IINterface1, IInterface2
{
public bool DoSomething();
public void IInterface2.DoSomething();
}
现在,返回void
的方法只有在将类强制转换为接口时才可访问:
Something s = new Something();
IInterface2 i = (IInterface2)s;
i.DoSomething(); // method returning void