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
请按任意键继续. . .

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

hi3531 软件部分说明 及说明文档 请认真阅读      david 656 易币 189 百纳币 20 金币 版主 ...

测试报告模板两则 -请认真对比

  • 2011年04月09日 11:55
  • 74KB
  • 下载

C# 代码中调用ActiveX控件更新接口造成编译错误的问题

这个问题困扰了我很久,应用场景是项目使用VC++开发一个基于COM的ActiveX控件。然后在C#中调用这个ActiveX控件进行日常的调试等操作。 可是每次ActiveX项目有接口更新,C#中也修...
  • sesiria
  • sesiria
  • 2016年09月07日 11:13
  • 834

C# 浅谈 接口(Interface)的作用与多态性调用(部分代码修正)

原文 http://blog.csdn.net/yunhaic/article/details/6662843的代码修正 继承"基类"跟继承"接口"都能实现某些相同的功能,但有些接口能够完成的功...
  • wky1709
  • wky1709
  • 2014年11月20日 16:36
  • 350

C#微信公众号与订阅号接口开发示例代码

C#微信公众号与订阅号接口开发示例代码
  • szsbell
  • szsbell
  • 2016年06月30日 15:51
  • 681

不管是什么行业,请认真看完这一篇

复旦女教师于娟已经去世半年多了,但这篇《为啥是我得癌症?》值得每个人认真阅读。 于娟,女,32岁,祖籍山东济宁,海归,博士,复旦大学优秀青年教师,一个两岁孩子的母亲,乳腺癌晚期患者。 2009年...

请认真对待数据库中的char 与varchar

做完学生管理系统的那会,发现一个问题。用户名后加了几个空格有时候照样可以登录系统,这可是我们想要的。下面就这个问题说下char与varchar的区别吧 先说下他们的工作方式 Char 是固定长...

你从未认真了解过但却真实存在的高薪行业在这里揭晓-请点击

一、课程适合人群; 二、课程用途; 三、必备的课程大纲知识点; 四、上课时间及地址; 五、正式学员对课程的反馈; 六、套餐优惠专区; 七、行业发展趋势; 八、...

[转] 请没有买房和买车的朋友一定认真的看...

­                                                                         香港著名经济学家——郎咸平   ...
  • xinyewdz
  • xinyewdz
  • 2012年06月11日 18:07
  • 19368
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#关于接口的代码说明,请认真对比
举报原因:
原因补充:

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