我正在尝试创建一组具有不同抽象级别的类.我将在这里使用Vector示例.
我的目标是我的类的用户可以选择要使用的抽象级别,即他们可能或可能不想使用更多派生类.
interface IVector
{
Vector A();
}
interface ISparseVector : IVector
{
new SparseVector A();
}
Run Code Online (Sandbox Code Playgroud)
现在,我实现这样的类:
class Vector : IVector
{
public Vector A() { return new Vector(); }
}
class SparseVector : Vector,ISparseVector
{
public new SparseVector A() { return new SparseVector(); }
}
Run Code Online (Sandbox Code Playgroud)
这一切都很好,花花公子.但是,当基类是抽象的时,例如:
abstract class Vector : IVector
{
public abstract Vector A();
}
class SparseVector : Vector,ISparseVector
{
public SparseVector A() { return new SparseVector(); } // Hides abstract member.
}
Run Code Online (Sandbox Code Playgroud)
我得到一个编译错误,说派生的方法隐藏了Vector中的抽象方法.知道怎么解决这个问题吗?
您想要的功能称为"返回类型协方差",它不是C#的功能.返回类型协方差是一种功能,您可以使用返回Animal的虚方法,然后使用返回Giraffe的方法覆盖它.
这样做是类型安全的,有些语言确实有这个功能 - 例如C++ - 但C#没有,我们没有计划添加它.您的重写方法必须标记为覆盖,并且必须完全匹配 - 名称,形式参数类型和返回类型.