c#关于接口的代码说明,请认真对比

原创 2007年09月20日 17:25:00

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            PrintFactory myFactory = new PrintFactory();
            Iprint myPrint = myFactory.CreatePrint();
            System.Console.WriteLine(myPrint.PrintData("这样做很方便啊"));
            System.Console.WriteLine("-----以下使用接口数组--------------");
            Iprint[] list = new Iprint[6];
            list[0] = new PrintA();
            list[1] = new PrintB();
            list[2] = new PrintC();
            list[3] = new PrintC1();
            list[4] = new PrintD();
            list[5] = new PrintE();

            for (int i = 0; i < list.Length; i++)
                System.Console.WriteLine(list[i].PrintData(i.ToString()));

            System.Console.WriteLine("-----以下使用ArrayList--------------");
            ArrayList arraylist = new ArrayList();
            arraylist.Add(new PrintA());
            arraylist.Add(new PrintB());
            arraylist.Add(new PrintC());
            arraylist.Add(new PrintC1());
            arraylist.Add(new PrintD());
            arraylist.Add(new PrintE());

            for (int i = 0; i < arraylist.Count; i++)
            {
                System.Console.WriteLine(((Iprint)arraylist[i]).PrintData(i.ToString()));
            }
            System.Console.WriteLine("===如果没有接口的话,在循环中必须用以上六个类的变量来分别获取数据元素==========");
            System.Console.WriteLine("-----lei--------------");
            (new BClass()).Run();
            (new FClass()).Run();
            ((BClass)(new FClass())).Run();
            System.Console.WriteLine("-----virtual--------------");
            (new BvirtualClass()).Run();
            (new FvirtualClass()).Run();
            (new F1virtualClass()).Run();
            ((BvirtualClass)(new FvirtualClass())).Run();
            ((BvirtualClass)(new F1virtualClass())).Run();
           
        }
    }
   
    interface   Iprint{  
        string PrintData(string   data);  
    }  


    class   PrintA:Iprint{  
      public virtual string PrintData(string   data)
      {
          System.Console.WriteLine("发生在:PrintA");
          return "PrintA:" + data;
      }  
    }

    class   PrintB:Iprint{  
      public   virtual  string    PrintData(string   data)
      {
          System.Console.WriteLine("发生在:PrintB");
          return "PrintB:" + data;
      }  
    }
    class PrintC : PrintB
    {
        public virtual string PrintData(string data)
        {
            System.Console.WriteLine("发生在:PrintC");
            return "PrintC:" + data;
        }
    }
    class PrintC1 : PrintB
    {
        public string PrintData(string data)
        {
            System.Console.WriteLine("发生在:PrintC1");
            return "PrintC1:" + data;
        }
    }

    class PrintD : PrintB
    {
        public override string PrintData(string data)
        {
            System.Console.WriteLine("发生在:PrintD");
            return "PrintD:" + data;
        }
    }
    class PrintE : PrintB, Iprint
    {
        public override string PrintData(string data)
        {
            System.Console.WriteLine("发生在:PrintE");
            return "PrintE:" + data;
        }
    }

    //定义工厂类  
    class   PrintFactory{  
      public   Iprint   CreatePrint()
      {  
          return   new   PrintA();  
      }  
    }  

    /////
    class BClass {
        public void Run()
        {
            System.Console.WriteLine("发生在:BClass");
        }
    }
    class FClass:BClass
    {
        //new public void  Run() 这样写,表明真实覆盖
        public void  Run()
        {
            System.Console.WriteLine("发生在:FClass");
        }
    }
    ///
    class BvirtualClass
    {
        public virtual void Run()
        {
            System.Console.WriteLine("发生在:BClass");
        }
    }
    class FvirtualClass : BvirtualClass
    {
        public override void Run()
        {
            System.Console.WriteLine("发生在:FClass");
        }
    }
    class F1virtualClass : BvirtualClass
    {
        public virtual void Run()
        {
            System.Console.WriteLine("发生在:F1Class");
        }
    }   
}

 


运行结果:

发生在:PrintA
PrintA:这样做很方便啊
-----以下使用接口数组--------------
发生在:PrintA
PrintA:0
发生在:PrintB
PrintB:1
发生在:PrintB
PrintB:2
发生在:PrintB
PrintB:3
发生在:PrintD
PrintD:4
发生在:PrintE
PrintE:5
-----以下使用ArrayList--------------
发生在:PrintA
PrintA:0
发生在:PrintB
PrintB:1
发生在:PrintB
PrintB:2
发生在:PrintB
PrintB:3
发生在:PrintD
PrintD:4
发生在:PrintE
PrintE:5
===如果没有接口的话,在循环中必须用以上六个类的变量来分别获取数据元素==========
-----lei--------------
发生在:BClass
发生在:FClass
发生在:BClass
-----virtual--------------
发生在:BClass
发生在:FClass
发生在:F1Class
发生在:FClass
发生在:BClass
请按任意键继续. . .

一道cpu计算题

一道CPU计算题
  • shiyongfu19890308
  • shiyongfu19890308
  • 2015年11月17日 23:24
  • 1040

最富人生哲理的24句电影台词

最富人生哲理的24句电影台词1、什么是权力?当一个人犯了罪,法官依法判他死刑。这不叫权力,这叫正义。而当一个人同样犯了罪,皇帝可判他死也可以不判他死。于是赦免了他。这就叫权力。--《辛德勒名单》htt...
  • sweetna
  • sweetna
  • 2008年12月22日 21:09
  • 1113

接口测试的那些事(四)接口自动化diff

接口diff的定义 接口diff即接口对比,就是对接口的返回结果进行对比,找出结果的差异之处。广泛意义上说,接口diff不局限于接口的个数(1/2/3/4/...个接口),也不局限于接口的返回形式(j...
  • wodeyijia911
  • wodeyijia911
  • 2017年01月25日 13:01
  • 2230

无法嵌入互操作类型"SpeechLib.SpVoiceClass".请改用适用的接口.

解决方法:         选择引用里的SpeechLib,更改属性内的嵌入互操作类型值为false,报错会消除。具体原理暂时还不清楚,望指教...
  • u011718618
  • u011718618
  • 2013年09月01日 08:36
  • 1183

C# 无法嵌入互操作类型shell32.ShellClass,请改用适合的接口

 将引用属性里面的 嵌入互操作类型  改为false 就行了
  • u011283902
  • u011283902
  • 2016年05月04日 14:19
  • 1557

请认真看完~

1.网银是我爸帮我弄的,用的时候,发现验证信息是“女儿,努力!”      2.妈说:“想你的时候,就一个人去逛街,想像着那些漂亮衣服穿在我女儿身上是什么样子的,这样我就开心了。”      ...
  • TDsfly
  • TDsfly
  • 2011年11月03日 09:23
  • 1528

实验吧——WriteUp&&涨姿势(4)

WriteUp 最安全的管理系统 认真你就输了 so beautiful so white 涨姿势 程序逻辑问题 FALSE...
  • sinat_34200786
  • sinat_34200786
  • 2017年05月26日 15:23
  • 271

C#显式实现接口函数

如果一个类实现了一个接口,他可以选择显示实现这个接口 如果显示实现了接口的话,要调用接口的方法,就必须将类型转换为接口去调用,如果要使用类的实例去调用,就必须为类实现该接口函数。 例如: int...
  • CHALLENG_EVERYTHING
  • CHALLENG_EVERYTHING
  • 2017年03月27日 11:12
  • 499

libpcap讲解与API接口函数讲解

转载有道:http://blog.chinaunix.net/uid-21556133-id-120228.html libpcap(Packet Capture Library...
  • zimiao815
  • zimiao815
  • 2016年10月29日 14:01
  • 391

hi3531 软件部分说明 及说明文档 请认真阅读

hi3531 软件部分说明 及说明文档 请认真阅读      david 656 易币 189 百纳币 20 金币 版主 ...
  • xi12319891005
  • xi12319891005
  • 2014年09月28日 13:50
  • 761
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#关于接口的代码说明,请认真对比
举报原因:
原因补充:

(最多只允许输入30个字)