我知道我不能重载返回类型(我想我知道这一点)。
void F()
{
}
bool F()
{
return true;
}
..产生错误already defines a member called 'F' with the same parameter types
但是,我正在阅读documentation for ISet from MSDN,我想我看到两个Add方法只会因返回类型而异。
这里发生了什么?
答案 0 :(得分:4)
另一个Add
方法是explicitly implemented interface method。
当显式实现接口方法时,如果不先将接口类型的引用转换为接口方法,则无法调用它,这使得调用明确无误,因此具有相同签名的多个方法就可以了。
要在代码中执行此操作,例如
class MyCollection<T> : ICollection<T> {
public void Add() { ... }
void ICollection<T>.Add() { ... }
}
当你希望接口方法做的事情与其他方法略有不同时,这避免了必须提出备用方法名称以避免与接口名称冲突。
答案 1 :(得分:4)
第一个“添加”方法实际上是ICollection<T>.Add
,它是继承的。
如果在类中实现,则需要明确实现两个Add
方法中的至少一个,即:
void ICollection<T>.Add(T item)
{
// ... Implement here
答案 2 :(得分:3)
接口方法可以明确实现,如下所示:
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