给定以下伪 C# 代码:
class BigMessage : Message { }
class SmallMessage : Message { }
abstract class Message
{
static public Message Factory()
{
Random random = new Random();
int randomNumber = random.Next(0, 100);
if (randomNumber > 50)
{
return new BigMessage();
}
else
{
return new SmallMessage();
}
}
}
class Worker
{
public void Comprehend(BigMessage bm)
{
}
public void Comprehend(SmallMessage bm)
{
}
public void start() {
Message msg = Message.Factory();
Comprehend(msg);
}
}
如果我要求工厂给我一个从 Message 继承的随机 Message 对象(例如 Big 或 Small Message),并且我希望 Worker 类中的 Comprehend 方法对使用重载给出的消息类型进行操作(正确的 OO 方式,而不是显式类型检查),为什么我会收到以下两种类型的错误,你能帮我理解我做错了什么吗?
- 'Worker.Comprehend(BigMessage)' 的最佳重载方法匹配有一些无效参数。
- 无法从“消息”转换为“大消息”
最终,我希望工厂为我提供一个继承自 Message 的对象,我事先不知道他的类型。鉴于返回的类型不同,我确实需要采取不同的行动。继承在这种情况下非常有用,因为抽象类提供了许多与其子类共享的有用功能。
使用 .NET 4.5。
提前致谢!