下面的代码在 C# 中不合法是否有合理的理由?
class X: IA, IB
{
public X test() // Compliation Error, saying that X is not IB
{
return this;
}
}
interface IA
{
IB test();
}
interface IB { };
最佳答案
更新:这个答案写于 2009 年。经过 20 年人们为 C# 提出返回类型协变,看起来它终于要实现了;我比较惊讶。见https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/底部公告;我相信细节会随之而来。
此功能称为“返回类型协方差”。 C# 不支持它的原因如下:
1) CLR 不支持它。为了让它在 C# 中工作,我们必须吐出一大堆小的辅助方法,这些方法将返回类型强制转换为正确的东西。没有什么能阻止您自己这样做。
2) Anders 认为返回类型协变不是一个好的语言特性。
3)\我们对语言有很多更高的优先级。我们只有有限的预算,所以我们尽量在任何给定的版本中只做我们能做的最好的功能。当然,这会很好,但如果您愿意,自己做起来也很容易。我们最好花时间添加功能来改善开发者体验或为语言增加更多的表现力。
关于c# - 为什么 C# 在实现接口(interface)时不允许继承返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49687500/