zoukankan      html  css  js  c++  java
  • 接口 显式实现 反射

    接口的显式实现,需要转为接口来调用.如下图,该方法不仅是私有的,而且是虚类型的。

    反射无法取到私有方法,所以也就无法通过反射该类来调用显式实现方法。此时可以考虑使用接口类型反射来调用。

    在多接口继承,并且接口多层次时,需要弄清楚最终实现的类到,是否多次包含最顶层接口的方法

    例如B继承A,C继承A,而D继承B,C, 此时D是实现一个A还是两个A,答案是一个A。

    也就是D的实现,不是实现B中A的方法,跟C中A的方法,而是分别实现,A,B,C所定义的方法。

     1  public  interface ISpeakor
     2     {
     3         void  Speak();
     4     }
     5     public   interface IBoySpeakor:ISpeakor
     6     {
     7           void Do();
     8     }
     9     public interface IGirlSpeakor : ISpeakor
    10     {
    11           void Do();
    12     }
    13     // 反射调用
    14     public class Speaker : IBoySpeakor, IGirlSpeakor
    15     {        
    16         //方法前面 不加public       
    17         void IBoySpeakor.Do()
    18        {
    19            Console.WriteLine("BoySpeakor.Do()");
    20        }
    21 
    22         void IGirlSpeakor.Do()
    23        {
    24            Console.WriteLine("GirlSpeakor.Do()");
    25        }
    26 
    27        void ISpeakor.Speak()
    28        {
    29            Console.WriteLine("Speakor.Speak()");
    30        }
    31        public void Do()
    32        {
    33            Console.WriteLine("this.Do()");
    34        }
    35        public void Speak()
    36       {   
    37            Console.WriteLine("this.Speak()");
    38       }
    39        private void DD()
    40        {
    41        }
    42         public static void Test()
    43         {
    44             Speaker sp=new Speaker();
    45             IBoySpeakor boy=sp;
    46             IGirlSpeakor girl=sp;
    47 
    48             sp.Speak();
    49             boy.Speak();
    50             girl.Speak();
    51             ((ISpeakor)sp).Speak();
    52             ((IBoySpeakor)sp).Speak();
    53             ((IGirlSpeakor)sp).Speak();
    54          
    55 
    56             Console.WriteLine();
    57             sp.Do();
    58             boy.Do();
    59             girl.Do();
    60             ((IBoySpeakor)sp).Do();
    61             ((IGirlSpeakor)sp).Do();
    62 
    63             Console.WriteLine();
    64        
    65             var ms=sp.GetType().GetMethods();
    66             foreach (var m in ms)
    67                 Console.WriteLine(m.Name);
    68 
    69             Console.WriteLine();
    70             var fs=sp.GetType().GetInterfaces();
    71             foreach (var f in fs)
    72                 Console.WriteLine(f.Name);
    73 
    74             typeof(IBoySpeakor).GetMethod("Do").Invoke(sp, null);
    75             //出错
    76             //typeof(IBoySpeakor).GetMethod("Speak").Invoke(sp, null);
    77             typeof(ISpeakor).GetMethod("Speak").Invoke(sp, null);
    78 
    79         }
    80     }

     

  • 相关阅读:
    python死磕一之数据结构和基础库
    常见IO模型
    如何在WS系统的DOS命令台打印JAVA_HOME变量
    windows下安装elasticsearch
    Windows系统设置临时环境变量
    20181130一些关键词
    自动化测试之路
    根据IP获取IP定位
    Servlet(汇聚页)
    软件工具(汇聚页)
  • 原文地址:https://www.cnblogs.com/AspDotNetMVC/p/2932507.html
Copyright © 2011-2022 走看看