抽象和虚函数

时间:2016-07-26 05:20:05

标签: c# oop inheritance virtual abstract

我正在尝试实现两级继承。目前,有一个抽象类和一个继承类:

public abstract class A
{
    public abstract void func();
}

public class B : A
{
    public override void func()
    {
        .......
    }
}

我想创建两个B类的专用实例,但我希望这些函数能够由A类公开。我想要的,

public abstract class A
{
    public abstract void func();
}

public class B : A
{
    public virtual void func();
}

public class C : B
{
    public override void func()
    {
         ........
    }
}

public class D : B
{
    public override void func()
    {
         ........
    }
}  

这个实现是错误的,但这是我的意图。我将如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

你没有实现的虚拟方法,所以你应该使类B抽象,这应该让编译器满意:

public abstract class B : A
{
}

替代方法是为函数func添加空方法体:

public class B : A
{
    public virtual void func()
    {
        // function has empty method body
        // it does not do anything, but you can override functionality in derived classes
    }
}

答案 1 :(得分:2)

您可以使用interface而不是抽象类A:

<h:form>
  <p:commandButton
    value="click me"
    onmousedown="mousedown();"
    onmouseout="mouseout();"
  />
  <p:remoteCommand
    name="mousedown"
    actionListener="#{commandButtonView.onMousedown}"
  />
  <p:remoteCommand
    name="mouseout"
    actionListener="#{commandButtonView.onMouseout}"
  />
</h:form>

可能对你有帮助。