【发布时间】:2013-04-30 01:56:48
【问题描述】:
给定以下伪 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”转换为“BigMessage”
最终我希望工厂为我提供一个继承自 Message 的对象,我事先不知道该对象的类型。鉴于返回的类型不同,我确实需要采取不同的行动。继承在这种情况下非常有用,因为抽象类提供了许多与其子类共享的有用功能。
使用.NET 4.5。
提前致谢!
【问题讨论】:
标签: c# inheritance factory typechecking