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方法不是被隐藏了吗?

解决方案 »

  1.   

    MyDerivedClass类已经不再受IMsg接口的制约啦,当你 IMsg m = d as IMsg;其实是把d的基类转换给m啦
    所以m是指向Myclass中的message方法所以,搂主把MyDerivedClass 类中的Message方法去掉也是没关系的接口的特性,搂主需要再去学习
      

  2.   

    谢谢net5i ~ 原来是这样..
      

  3.   

    再说得明白一些吧,对于类似:IMsg m = d as IMsg;这样接口实例转换,
    转换的结果对象是接口的实现者,而不是接口的实现者的任何子类。
      

  4.   

    public class MyDerivedClass : MyClass
    {
      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" );
      }