【发布时间】:2020-03-12 03:05:55
【问题描述】:
我正在尝试重写一个抽象函数,但在为列表指定类型时收到错误消息。该类型具有基抽象类所请求的接口。
基础渲染器
public abstract class Renderer
{
abstract void Render(Dictionary<GenericVAO, List<IEntity>> data);
}
精灵渲染器
public class SpriteRenderer : Renderer
{
public override void Render(Dictionary<GenericVAO, List<Sprite>> data) {}
}
精灵
public class Sprite : IEntity
{
public SpriteVAO model;
}
【问题讨论】:
-
参数的类型是签名的组成部分。继承必须与签名相匹配。要么使用
List<IEntity>,要么查看重载,而不是继承。 -
我不能对每种类型的渲染器都进行重载,因为基础渲染器应该是主渲染器可以处理的渲染器的轮廓。我不能重载,因为新的渲染器是在这个库之外制作的。也许我应该将基本渲染器更改为界面?但我认为我仍然会遇到这个问题
-
“为什么
T<Base>不是T<Derived>的父级”似乎是几乎每小时都会问的问题...我强烈建议您在开始提出“解决方法”之前先阅读一下... -
@AlexeiLevenkov 这根本不是我的问题。即使交换了基类和派生类,它也不起作用。我问我如何实现我正在尝试做的事情,因为我目前的实现显然不正确。
-
IEntity 存在,所以如果你得到一个 Sprite、一个 Foo 或一个 Bar 类,你不必担心。只要它们从 IEntity 继承,它们就很适合
List<IEntity>
标签: c# inheritance interface abstract