抽象函数和虚函数
Abstract and virtual functions
我正在尝试实现两级继承。目前,有一个抽象 class 和一个继承 class :
public abstract class A
{
public abstract void func();
}
public class B : A
{
public override void func()
{
.......
}
}
我想创建 class B 的两个专用实例,但我希望这些函数由 class 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()
{
........
}
}
这个实现是错误的,但这是我的意图。我将如何实施?
你不能有没有实现的虚方法,所以你应该 class 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
}
}
你可以使用接口而不是抽象 class 像这样:
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();
}
}
可能对你有帮助。
我正在尝试实现两级继承。目前,有一个抽象 class 和一个继承 class :
public abstract class A
{
public abstract void func();
}
public class B : A
{
public override void func()
{
.......
}
}
我想创建 class B 的两个专用实例,但我希望这些函数由 class 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()
{
........
}
}
这个实现是错误的,但这是我的意图。我将如何实施?
你不能有没有实现的虚方法,所以你应该 class 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
}
}
你可以使用接口而不是抽象 class 像这样:
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();
}
}
可能对你有帮助。