【发布时间】:2012-03-01 03:04:26
【问题描述】:
基类
class Drawer
{
public abstract void Draw<T>(T type);
}
派生类#1
class ADrawer : Drawer
{
public override void Draw<T>(List<T> list)
{
foreach (var a in list)
{
DrawA(a);
}
}
public void DrawA(Agent a)
{
//draw code here
}
}
派生类#2
class AnotherDrawer : Drawer
{
public override void Draw<T>(T number)
{
if (number == 1)
{
//draw code
}
}
}
错误在 #1 派生类中:“找不到合适的方法来覆盖”
我应该在基类中使用“virtual”以及“abstract”吗?
我应该如何设置基参数类型以允许派生类中的各种参数?
【问题讨论】:
-
顺便说一句,抽象方法隐含地是虚拟方法,因此您不必将方法定义为抽象和虚拟。
-
您有两种概念上不同的方法。您的“绘制”方法之一绘制一个事物,另一个绘制许多事物。首先,您不应该尝试将它们变成相同的方法;制作两个方法:
Draw<T>(T item)和DrawMany<T>(IEnumerable<T> items)。与List<T>相同,有Add和AddRange方法;对一件事情做某事和对很多事情做某事是两种不同的操作,所以有两种不同的方法。
标签: c# generics overriding abstract