• C#接口的作用实例解析


    一、接口的作用:

    我们定义一个接口:

    public interface IBark
    {
        void Bark();
    }

    1、  再定义一个类,继承于IBark,并且必需实现其中的Bark()方法

    public class Dog:IBark
    {
        public Dog()
        {}
        public void Bark()
        {
           Consol.write("汪汪");
         }
    }

    2、   然后,声明Dog的一个实例,并调用Bark()方法

    Dog 旺旺=new Dog();
    旺旺.Bark();

    3、试想一样,若是想调用Bark()方法,只需要在Dog()中声明这样的一个方法不就行了吗,干什么还要用接口呢.因为接口中并没有Bark()具体实现.真的实现还是要在Dog()中.那么使用接口不是多此一举吗?

    4、还有人是这样说的:从接口的定义方面来说,接口其实就是类和类之间的一种协定,一种约束.还拿上面的例子来说.所有继承了IBark接口的类中必需实现Bark()方法.那么从用户(使用类的用户)的角度来说,如果他知道了某个类是继承于IBark接口,那么他就可以放心大胆的调用Bark()方法,而不用管Bark()方法具体是如何实现的.比如,我们另外写了一个类.

    public class Cat:IBark
    {
          public Cat()
          {}
          public void Bark()
          {
               Consol.write("喵喵");
          }
    }

    5、 当用户用到Cat类或是Dog类的时候,知道他们继承于IBark,那么不用管类里的具体实现,而就可以直接调用Bark()方法,因为这两个类中肯定有关于Bark()方法的具体实现.

    6、 如果我们从设计的角度来看.一个项目中用若干个类需要去编写,由于这些类比较复杂,工作量比较大,这样每个类就需要占用一个工作人员进行编写.比如A程序员去定Dog类,B程序员去写Cat类.这两个类本来没什么联系的,可是由于用户需要他们都实现一个关于”叫”的方法.这就要对他们进行一种约束.让他们都继承于IBark接口,目的是方便统一管理.另一个是方便调用.当然了,不使用接口一样可以达到目的.只不过这样的话,这种约束就不那么明显,如果这样类还有Duck类等等,比较多的时候难免有人会漏掉这样方法.所以说还是通过接口更可靠一些,约束力更强一些.

          在C#的开发中,接口是非常重要也非常好用的。可是很多时候很多人都不是很了解接口的做用,以及该如何使用。下面我们就来理解接口的作用,并看看如何使用吧。

    二、C#中接口的深入浅出:

    假设我们公司有两种程序员:ASP.NET程序员,指的是用ASP.NET写程序的程序员,用clsASPProgramer这个类表示;Delphi程序员指的是用 Delphi写程序的程序员,用clsDelphiProgramer这个类来表示。 每个类都有一个WriteCode()方法。定义如下:

        public class clsAspProgramer
        {
            public void WriteCode()
            {
                Console.WriteLine("Asp程序员编写");
            }
        }
    
        public class clsDelphiProgramer
        {
            public void WriteCode()
            {
                Console.WriteLine("Delphi程序员编写");
            }
        }

    现在公司来了一个项目,要求派某个程序员写一个程序。

        class ClsProject
        {
            public void WritePrograme(clsAspProgramer programer)   //用Asp写代码
            {
                programer.WriteCode();
            }
    
            public void WritePrograme(clsDelphiProgramer programer)  //重载方法,用Delphi写代码
            {
                programer.WriteCode();
            }
        }
    
     //在主程序中我们可以这样写:
       static void Main(string[] args)
       {
                ClsProject clsProject = new ClsProject();
                //Asp需要写代码
                clsAspProgramer programer = new clsAspProgramer();
                clsProject.WritePrograme(programer);
    
                //Delphi需要写代码
                clsDelphiProgramer programer1 = new clsDelphiProgramer();
                clsProject.WritePrograme(programer1);
    
                Console.Read();
                 
       }

    运行结果:

           

       但是如果这时公司又来了一个C#程序员,我们怎么改这段程序,使它能够实现用C#写程序的功能呢?我们需要增加一个新类 clsCSharpProgramer,同时在此clsProject这个类中要再次重载WritePrograme (clsCSharpProgramer programer)方法。这下麻烦多了。如果还有C程序员,C++程序员,JAVA程序员呢。麻烦大了!

    但是如果改用接口,就完全不一样了:
    首先声明一个程序员接口: 

    interface IProgramer()
     {
       WriteCode();
     }

    然后声明两个类,并实现IProgramer接口:

     public class clsAspProgramer: IProgramer
        {
            public void WriteCode()
            {
                Console.WriteLine("Asp程序员编写");
            }
        }
    
        public class clsDelphiProgramer : IProgramer
        {
            public void WriteCode()
            {
                Console.WriteLine("Delphi程序员编写");
            }
        }
    
        class ClsProject
        {
            public void WritePrograme(IProgramer programer)   //接口参数
            {
                programer.WriteCode();
            }
        }

    Main方法中修改如下:

    //在主程序中我们可以这样写:
    static void Main(string[] args)
    {
        IProgramer programer;
        ClsProject clsProject = new ClsProject();
        //Asp需要写代码
        programer = new clsAspProgramer();
        clsProject.WritePrograme(programer);
    
        //Delphi需要写代码
        programer = new clsDelphiProgramer();
        clsProject.WritePrograme(programer);
    
        Console.Read();
                 
    }

    效果如下:

         

     如果再有C#,C,C++,JAVA这样的程序员添加进来的话,我们只需把它们相关的类加进来,然后在main()中稍做修改就OK了。扩充性特别好!像下面这样添加一个CSharp程序员添加进来: 

    //clsProject类和IProgramer都无须改变,只需要再写一个CSharp程序员的类就可以了    
    class ClsCSSharpProgramer : IProgramer   //记住,要实现IProgramer接口
        {
            public void WriteCode()
            {
                Console.WriteLine("CS程序员编写");
            }
        }

    Main方法:

        //在主程序中我们可以这样写:
        static void Main(string[] args)
        {
            IProgramer programer;
            ClsProject clsProject = new ClsProject();
            //Asp需要写代码
            programer = new clsAspProgramer();
            clsProject.WritePrograme(programer);
        
            //Delphi需要写代码
            programer = new clsDelphiProgramer();
            clsProject.WritePrograme(programer);
        
            //CS程序员
            programer = new ClsCSSharpProgramer();
            clsProject.WritePrograme(programer);
        
            Console.Read();
             
        }

    效果如下:

            

     这样我们如果把clsProject这个类封成一个组件,那么当我们的用户需要要扩充功能的时候,我们只需要在外部做很小的修改就能实现,可以说根本就用不着改动我们已经封好组件!是不是很方便,很强大!

  • 相关阅读:
    Siege 3.0 正式版发布,压力测试工具
    Pomm 1.1.2 发布,专为 PG 设计的 ORM 框架
    Whonix 0.5.6 发布,匿名通用操作系统
    国内开源 java cms,Jspxcms 2.0 发布
    EZNamespaceExtensions.Net v2013增加对上下文菜单、缩略图、图标、属性表的支持
    GNU Guile 2.0.9 发布,Scheme 实现
    jdao 1.0.4 发布 轻量级的orm工具包
    OpenSearchServer 1.4 RC4 发布
    Percona Server for MySQL 5.5.3030.2
    Samba 4.0.5 发布
  • 原文地址:https://www.cnblogs.com/youmingkuang/p/13962436.html
Copyright © 2020-2023  润新知