抽象函数和虚拟函数

本文关键字:函数 虚拟 抽象函数 | 更新日期: 2023-09-27 17:58:38

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

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()
    {
         ........
    }
}  

这种实施是错误的,但这是我的意图。我将如何实现这一点?

抽象函数和虚拟函数

您可以使用接口而不是像这样的抽象类A:

public interface A
{
    void func();
}
public abstract class B: A
{
    public abstract void func();
}
public class C : B
{
    public override void func()
    {
        throw new NotImplementedException();
    }
}
public class D : B
{
    public override void func()
    {
        throw new NotImplementedException();
    }
}

也许它对你有帮助。

如果没有实现,就不能有虚拟方法,所以应该使类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
    }
}