rt

解决方案 »

  1.   

    search "接口"http://topic.csdn.net/u/20090405/11/2937cf64-ef6c-4930-a04e-cd59625ba93d.html接口只是一种契约使用 interface 去定义某些特定的功能,为的是不要将代码写死在自定义 class、function 里,
    以便在 SA / OOD / 系统开发、事后维护、功能扩充 上更有弹性。WCF 中也是建议先用 interface 做 memeber、method 的定义,再由自定义类去实践。
    亦可参考 SA / Design Patterns 的文件和书籍。 
    例如返乡的火车订票系统,我们(或SA,SD) 可以先定义一个叫做「订票需求」的 interface,里面只要有一个空的「是否能订票」的函数即可。
    而可能有一或多个自定义 class,分别叫做「特定班次」、「特定座位」、「特定ooxx」、… 的class,
    都是「实作(implement)」这个「订票需求」interface,因此也都已有了这个「是否能订票」的函数,而程序员,就去把这几个实现的 class 的「是否能订票」的函数去写出来,
    因此在 SA 阶段,程序语言不是重点。日后这个火车,若是订位方式改变、或座位改变、或是要加入或改变其它订票的功能和需求,
    就不用再去动到「订票需求」的 interface,
    只要更动实现它的 class 即可,
    程序员改好某个 class 的「是否能订票」的函数之后,再 Plug-in 到系统里即可。
    不会去动到 SA 和整个系统架构,这在中大型项目中尤其重要,不论是 .NET / J2EE 皆然。
    亦可参考 SA 系统分析、OOD、UML 的书籍。
      

  2.   

    就是我定义一个接口,让实现类决定具体怎么操作
    然后调用时,并不要知道实现类是怎么实现的具体操作,调用接口的方法就可以了
    例子么:IDisposable接口
      

  3.   

    面向接口编程是oop的精华所在.
      

  4.   

    给你个例子吧:
    public interface ISave
    {
     void SaveData(string data);//data当然可以是更复杂的数据
    }public class DataManager
    {
     public ISave Saver{get;set;}
     public string Data{get;set;}//当然可以是更复杂的数据
    }public class TextSaver:ISave
    {
     public void SaveData(string data){}//保存到文本文件
    }public class DataBaseSaver:ISave
    {
     public void SaveData(string data){}//保存到数据库
    }
    ....
    public static main(..)
    {
     DataManager dm=new DataManager();
     dm.data="adfqwei";
     dm.Saver=new TextSaver();
     dm.SaveData();//保存到文本文件(可以只更改TextSaver()类或实现多个达到保存为.txt,.doc,.xml等文件
     dm.Saver=new DataBaseSaver();
     dm.SaveData();//保存到数据库(可以只更改DataBaseSaver()类或实现多个更达到保存到多种数据库(access,sql等);
    }
      

  5.   

    个人理解:广义上的接口就是一个方法被调用的一种规范,任何一种方法相对于调用端都是调用端的接口
    而c#中的接口我觉得在设计角度解释比较好一些,接口是对行为的一种的抽象,可以对不同类的行为进行
    抽象,例如:飞()这个行为,应该不属于人类,而超人类可以继承人类,但这个超人类必须实现飞这个方法
    怎么办呢?鸟类能实现飞();飞机物亦能,而超人类,鸟类,飞机物类如何抽象上层类呢?很明显很难抽象了,
    除非object,但这样不行,这时接口可以解决问题,我们构造一个IEnableFly{void fly();},这样这三个
    类都能实现fly这个方法了.
      

  6.   

    我學習編程時間不長   不過OOP學完了  
      
      OOP 繼承,封裝,多態。如果 你写一个 程序  person  和 student 类 
      
    用person 派生出student子类     子类可以重写父类的 方法  但如果有一个和父类不相关的 方法  那你会怎么去写???一个子类只等去继承一个父类    但一个类可以去多次继承接口      OK!!! 就是这样  本人才疏学浅   希望对你有所帮助 
      

  7.   

    我在项目中大量使用接口,如果是多人合作项目更是不可少,举个例子:我要写一个打印程序,但是面临的问题是必须使用不同的打印机,有HP的,IBM的、Epsom的等等。但是针对每一个打印机的程序只有2个必须要用到的函数,Print(),PrintPreview(),这两个函数不同的打印机里面的具体实现代码是不一样的,但是从主程序的角度来看是无所谓的,因为主程序只是要调用一下Print和PrintPreview函数以便达到效果而以好了,现在设计这样一个打印接口 IPrint
    public interface IPrint
    {
              void Print();
              void PrintPreview();
    }那么现在我来写一下主程序,就是调用这个接口的程序static voic Main()
    {
          Console.WriteLine("Plesas select printer:");
          string printerName = Console.Readline();
          IPrint printer = null;      if(printerName == "HP")
          {
              printer = new HPPrinter();
          }
          else if(printerName == "IBM")
          {
              printer = new IBMPrinter();
          }
          else if(printerName == "Epsom")
          {
              printer = new EpsomPrinter();
          }      printer.PrintPreview();
          printer.Print();
    }
    好了,这就是主程序,你首先要选择你要用那种打印机,比如你输入"IBM",那么程序就会实例化一个IBM的打印机程序 new IBMPrinter();然后,程序执行PrintPreview()和Print()函数OK,现在,主程序有了,那么我为了最快地完成任务,只要找到3个熟悉HP,IBM,EPSOM打印机的专业人才,分别写3个类,每个类继承IPrint接口,那么所有的任务完成了,多么优美,多么简洁漂亮。这三个类如下:public class HPPrint : IPrint
    {
       public void PrintPreview()
       {
           Console.WriteLine("this is HP Printer");
        }
      
       public void Print()
       {
           Console.WriteLine("this is HP Printer");
       }
    }public class IBMPrint : IPrint
    {
       public void PrintPreview()
       {
           Console.WriteLine("this is IBM Printer");
        }
      
       public void Print()
       {
           Console.WriteLine("this is IBM Printer");
       }
    }public class EpsomPrint : IPrint
    {
       public void PrintPreview()
       {
           Console.WriteLine("this is Epsom Printer");
        }
      
       public void Print()
       {
           Console.WriteLine("this is Epsom Printer");
       }
    }这就是接口的作用,如果你的悟性达到一个程度,看完我的介绍,应该马上会领悟到接口的优美和其重要性
      

  8.   

    用过MVC吗?用接口可以很好的换数据库!方便!
      

  9.   

    想弄清楚interface abstract virtual override的用法,最好的办法是学习设计模式深入浅出设计模式  写得不错
      

  10.   


    例子挺通俗易懂的,但不是很好吧,用继承的话有很大区别么?
    小团队在实际开发中这么做除了多写点代码,告诉别人说我这是用了接口编成外还有什么优势么?
    现在玩感念的人太多,接口也不是那么好玩的,不好意思不是针对你
    WCF好,小网站用得着么
      

  11.   

    http://chengbo.cnblogs.com/archive/2006/06/16/426612.html
    这个鸭子的例子,可以看出接口与继承的区别
      

  12.   

    写的不错,不过这个例子还缺少一部分,人家可以说我可以在基类上定义Print(),PrintPreview() 2个虚函数,让后续不同打印机的类继承这个基类,override 虚函数,然后通过基类指针一样可以实现这个功能。
    如果你这么说,如果要给HP打印机和IBM打印机增加一个新功能如Scan(),如果用基类虚函数就得重新修改基类,基类修改会影响到所有继承他的类,系统成型后修改基类是非常危险的,而用接口只需让HP的,IBM的打印类再继承一个IScan接口就行了,不会影响到其他类,这就是接口优越于虚函数的地方。
      

  13.   

    他们都是说的技术方面的,我说下团队开发方面的.
    比如我们开发一个学生管理系统
    有三类学生:小学生,中学生,高中生.
    用三个模块来实现各自的功能,每个模块分一个组员a,b,c开发,.
    程序中要对三类学生的家庭信息进行处理,这是另外一个模块
    这个模块需要使用三个类型的管理方法
    由D来完成,请问是不是要等a,b,c都完成后D才开始工作呢?
    显然不行.
    那我们定义接口包含未实现的管理方法,实现在三个类中各自实现.
    这样,D就可以基于接口编程,而不需要等到其他模块实现完成.
    一点点小的说明,呵呵
      

  14.   

        对于接口这个问题,如果仅仅从形式用interface定义几个方法那是很简单的,但是这不能算是你对接口的真正理解,真正理解接口的标准是当你在工作的时候设计一个系统的时候,你自然而然的用上了接口.
        很多的教程,实例以各种各样打印机作为例子,说打印机有各自的打印方法,此时需要接口,毕竟这样的例子也许会有,但是大多数人不一定会碰到,所以说例子不能太理想化,对于接口的发明者来说,他要考虑到人世间的种种情况,可以理想化.大家最喜欢的直觉,就是对于自己现在做的项目,接口有什么用?
        我从项目中使用的感觉来看,接口是一种约束,就是说你使用了接口,你非得接受这个约束 ,实例是这样的,我在项目的底层使用的是第三方的控件,每个实体类都少一个字段,这个字段是用来标志表名的,用tablename来标志这个字段,好了现在一个实体类里面加了tablename字段,另外一个实体类里面也加了tablename字段,这样为每个实体类都加上这个字段,这样也是对的,只要程序员的觉悟好就行,但也有可能会把tablename写成tablename1,当然关系也不大,但总给人怪怪的感觉,如果继承一个统一的接口的话,那么所有表名字段只能用tablename来表示了.
      

  15.   

    interface是茫茫class海洋中的龙筋,行走在上面你就不会沉没。个人理解,最大的好处在于多态的使用,可以先定义好interface 及所属方法,然后将继承的类写入应用中(只写Iclass.callmethod();)而具体的calss的实体方法可以给不同的人,不同的公司,不同的厂家去写。比如打印机的drive.