C#的未来:协变返回类型
一个常见的API设计问题是无法在重写方法时使用更具体的返回类型。Clone方法就是一个很好的例子。
public abstract Request Clone();
在子类中,你可能会希望像下面这样实现这个方法:
public override FtpRequest Clone() { ... }
由于FtpRequest是Request的子类,从逻辑上讲这是合理的。但在.NET中你不能这样实现,因为重写必须精确匹配。你也不能通过重写获得一个仅有返回类型不同的新方法。所以通常你会得到一些复杂的东...