我从Effective C#项目23获得下面的代码应打印一个基类派生的:MyDerivedMessage
从实现的接口
namespace ConsoleApplication1
{
interface IMsg
{
void message();
}
public class MyMessage : IMsg
{
public void message()
{
Console.WriteLine("MyMessage");
}
}
public class MyDerivedMessage : MyMessage
{
public new void message()
{
Console.WriteLine("MyDerivedMessage");
}
}
class Test
{
static void Main()
{
MyDerivedMessage mdm = new MyDerivedMessage();
IMsg im = mdm as IMsg;
im.message();
}
}
}
书:
public class MyDerivedClass : MyClass
{
public new void Message()
{
Console.WriteLine("MyDerivedClass");
}
}
添加的IMSG关键字的改变您派生的 类的行为,以便IMsg.Message()现在使用派生类版本:
MyDerivedClass d = new MyDerivedClass();
d.Message(); // prints "MyDerivedClass".
IMsg m = d as IMsg;
m.Message(); // prints " MyDerivedClass "
为什么我仍然可以MyMessage
印刷我加上“新”来MyDerivedMessage::message()
后?
呀第二部分与虚拟和覆盖香港专业教育学院做了,但我搞不清为什么书上说,它将打印派生消息。 – Kobe
我不熟悉的书,但只有两个选项:1)有书中错误,或2)你误解了该书的那个部分。如果您使用与本书中相同的代码,并声称输出应该不同,那么这本书就有错误。 –
是的,这本书有一个错误 - 检查这里有效的C#的勘误表:http://billwagner.cloudapp.net/EffectiveCSharp它涉及您正在阅读的部分。 –