C# 抽象方法继承和无意隐藏方法

标签 c# inheritance abstract

我有一个关于意外隐藏抽象方法的问题。

我正在创建一个基本 Entity 类作为接口(interface),在我正在开发的游戏中创建所有其他实体。

从这个实体类中,我创建了几个派生类。有诸如 MovingEntity、Trigger、Door 等......这些子类中的许多也有从它们派生的子类。例如,MovingEntity 将 Projectile 和 EnemyUnit 等类作为子类。

在我的基本实体类中,我有像 Update() 和 Render() 这样的抽象方法,因为我希望每个实体都实现这些方法。

然而,一旦我进入第二级,这就是我遇到问题的地方。例如,我将使用 Trigger 类。 Trigger 派生自基 Entity 类,但 Trigger 仍然有自己的子类(如 TriggerRespawning 和 TriggerLimitedLifetime)。我不想实例化 Trigger 对象,所以我可以保持该类抽象 - 我只会从 Trigger 的子类创建对象。但是我应该如何处理 Trigger 应该从 Entity 实现的抽象方法呢?

我想我基本上可以在 Trigger 中使用与在 Entity 中相同的代码。声明相同的方法,相同的名称,相同的参数,并称之为抽象。然后,Trigger 的子代将被迫实现实际功能。

但是,这不起作用,因为在 Trigger 类中,我的构建错误表明我正在从基 Entity 类中隐藏抽象方法。

我怎样才能传递强制最终 child 实现这些抽象方法的想法,而不让所有中间的 parent 都实现它们?我需要在第一轮 child 类(class)中使用虚拟吗?

到目前为止,我还没有找到一个好的答案,所以我决定打破并询问。提前谢谢各位。

最佳答案

只是根本不要重新声明方法 - 最终的具体类将必须实现所有仍未实现的抽象方法:

public abstract class Foo
{
    public abstract int M();
}

public abstract class Bar : Foo
{
    // Concrete methods can call M() in here
}

public class Baz : Bar
{
    public override int M() { return 0; }
}

关于C# 抽象方法继承和无意隐藏方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7469409/

相关文章:

c# - 是否可以克隆 IEnumerable<T> 实例,保存迭代状态的副本?

java - 如何将基类对象分配给父类引用?

java - 抽象类 - super 构造函数 (Java)

c# - List.Remove从一个也从另一个删除

c# - 返回字节数组作为具有 Image/png 内容类型的 Http 响应

c# - Xamarin : Can not resolve reference: `System.Threading.Tasks.Extensions` , 被 `MySqlConnector` 引用。

java - 将非重写派生类方法的方法引用传递给其基类是否合法且已定义?

c# - 将派生类引用传递给基类引用

java - 泛型抽象类构造函数

c++ - 因为以下虚函数在一个类中是纯的