在同一个类中覆盖和覆盖方法

时间:2014-02-05 16:47:27

标签: c#

查看以下非编译C#代码:

public abstract class Operation
{
    public abstract void Work();
}

public abstract class Operation<T> : Operation
{
    public override void Work()
    {
        Work();
    }

    public new abstract T Work();
}

虽然可以在基类中引入一个新名称覆盖它,但似乎仍然无法覆盖基类中的前一个方法 - 为了进行覆盖,必须定义一个矛盾的方法。

有什么我忽略的或者这是不可能的吗?

1 个答案:

答案 0 :(得分:1)

第一个选项,就像你可能不喜欢听到的那样,你可以简单地提出一个新的方法名称,而不是遮蔽另一个方法:

然而,另一个更激进的变化是Operation是一个接口,而不是一个没有实现的抽象类。

public interface IOperation
{
    void Work();
}

此时您也可以将继承类型作为接口,因为它不需要实现:

public interface IOperationWithResult<T> : IOperation
{
    T Work();
}

或者你可以使它成为一个简单地实现接口的抽象类:

public abstract class Operation<T> : IOperation
{
    public new abstract T Work();

    void IOperation.Work()
    {
        Work();
    }
}

我个人认为这里有两个接口而没有抽象类,因为这些类型在概念上不提供任何实际的实现,也不是概念抽象类型。他们的目的是定义一个许多其他无关类型可以满足的契约(即做一些工作或计算某些结果的能力),这正是接口的用途。