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

本文通过具体的C#代码示例介绍了如何使用接口和继承来提高代码的复用性和灵活性。包括接口的基本定义、实现接口的类、继承与多态的应用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值