如何从 C# 中实现的 class 引用抽象方法
How to reference abstract method from an implemented class in C#
我有一个基础 class (A),下面,我一直想继承自
class A
{
abstract protected int foo();
public int foo2()
{
//do some stuff
foo();
}
}
这行不通,因为我不能在非抽象中使用抽象方法 class。但是我怎样才能实现以下目标:
class 继承 class A 的 es 已经实现了 foo2 但 class 继承的 es 必须实现 foo?最好 foo2 是可覆盖的。
更新:Class A 不必是非抽象的
只需将 class A
摘要。 Abstract classes 可以实现一些方法。
使 foo2()
成为虚拟的,然后 class 从 A
派生的 es 可以覆盖它。
您在构建项目时会收到错误消息
你不能在非抽象中定义抽象方法 class
异常
Error 1 ' .A.foo()' is abstract but it is contained in non-abstract class
我希望您有充分的理由不将 A
抽象化。更改现有非抽象 class 行为的首选方法是 inject 该行为。
interface IFoo
{
int Foo();
}
class A
{
private IFoo foo;
public A(IFoo foo)
{
this.foo = foo;
}
public int Foo2()
{
//...
return foo.Foo();
}
}
我有一个基础 class (A),下面,我一直想继承自
class A
{
abstract protected int foo();
public int foo2()
{
//do some stuff
foo();
}
}
这行不通,因为我不能在非抽象中使用抽象方法 class。但是我怎样才能实现以下目标:
class 继承 class A 的 es 已经实现了 foo2 但 class 继承的 es 必须实现 foo?最好 foo2 是可覆盖的。
更新:Class A 不必是非抽象的
只需将 class A
摘要。 Abstract classes 可以实现一些方法。
使 foo2()
成为虚拟的,然后 class 从 A
派生的 es 可以覆盖它。
您在构建项目时会收到错误消息 你不能在非抽象中定义抽象方法 class
异常
Error 1 ' .A.foo()' is abstract but it is contained in non-abstract class
我希望您有充分的理由不将 A
抽象化。更改现有非抽象 class 行为的首选方法是 inject 该行为。
interface IFoo
{
int Foo();
}
class A
{
private IFoo foo;
public A(IFoo foo)
{
this.foo = foo;
}
public int Foo2()
{
//...
return foo.Foo();
}
}