在某些情况下,您不想以直接形式在公共 API 上公开某些内容。也许它永远不会起作用;也许公共 API 可以公开相同功能的更合适的签名。例如:
public int Add(Foo foo) {...} // takes a known type and returns the new index
void ICollection.Add(object obj) {...} // takes object and returns void
一个更常见的例子是当不可能不这样做时——例如,IEnumerable
每个IEnumerable<T>
人都有一个GetEnumerator()
方法——相同的输入,但不同的返回值。C#不允许通过返回值重载,所以你至少需要两个方法:
IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
public IEnumerator<T> GetEnumerator() { ...}
尽管它们也可以都是显式的。或者实际上,在IEnumerator<T>
:
public T Current { get { ... } }
object IEnumerator.Current { get { return Current; } }
此外,有时您只想重命名事物。例如,由于某种原因 aFrobber
有一个方法,它自然是Frob()
。但它也实现了一个IDoSomething
有方法的接口DoIt()
;您现在可以使 API 反映最合适的术语来表达意图:
class Frobber : IDoSomething {
public void Frob() {..}
void IDoSomething.DoIt() { Frob(); }
}