interface IMsg
{
void Message();
}public class MyClass : IMsg
{
public void Message()
{
Console.WriteLine("MyClass" );
}
}public class MyDerivedClass : MyClass
{
public new void Message()
{
Console.WriteLine( "MyDerivedClass" );
}
}public class test
{
static void Main()
{
MyDerivedClass d = new MyDerivedClass( );
d.Message( ); // prints "MyDerivedClass"
IMsg m = d as IMsg;
m.Message( ); // prints "MyClass"
}
}请问为什么m是指向Myclass中的message方法? d对象中Myclass的message方法不是被隐藏了吗?
{
void Message();
}public class MyClass : IMsg
{
public void Message()
{
Console.WriteLine("MyClass" );
}
}public class MyDerivedClass : MyClass
{
public new void Message()
{
Console.WriteLine( "MyDerivedClass" );
}
}public class test
{
static void Main()
{
MyDerivedClass d = new MyDerivedClass( );
d.Message( ); // prints "MyDerivedClass"
IMsg m = d as IMsg;
m.Message( ); // prints "MyClass"
}
}请问为什么m是指向Myclass中的message方法? d对象中Myclass的message方法不是被隐藏了吗?
解决方案 »
- GDI绘制文字,如何在有限的空间内绘制出所需要的文字
- C#如何计算每年的国家节假日
- sql调用自定义函数怎么写啊
- 如何实现windowsform框架
- 关于控制台应用程序的问题,求教了,谢谢
- c#中使用panel的scale缩放控件和子控件的问题??
- 给定一个中文字符,在C#中如何判断该字符为中文字符?
- 急急急,在WEBFORM中datagrid中如何使用checkbox??100分相送!!!!!
- PictureBox 中画矩形,切换画面,后为何矩形会消失?谢谢
- 在datagrid中如何使定位的行自动滚动到可见界面上?
- 谁能帮我检查下这个数据连接又没用?
- datagridview重新绑定数据问题
所以m是指向Myclass中的message方法所以,搂主把MyDerivedClass 类中的Message方法去掉也是没关系的接口的特性,搂主需要再去学习
转换的结果对象是接口的实现者,而不是接口的实现者的任何子类。
{
public new void Message()
{
Console.WriteLine( "MyDerivedClass" );
}
} 关键是 new 的问题,在方法定义时使用 new 就相当于一个新的方法,与IMsg 中的Message() 没有一点关系的,只不过是名称与 IMsg.Message() 相同而已,
只是 MyDerivedClass 的方法名称与 IMsg 中方法名称一样,简单点直接:public class MyDerivedClass : MyClass
{
public void NewMessage()
{
Console.WriteLine( "MyDerivedClass" );
}
}