黑马程序员技术交流社区

标题: 接口的作用 [打印本页]

作者: 郑建豪    时间: 2012-4-7 19:18
标题: 接口的作用
本帖最后由 郑建豪 于 2012-4-7 19:21 编辑

学了一下接口
声明:
public interface MyInterface
{
    private int Method(int Var1,long Var2);
}
实现:
class MyClass:MyInterface
{
     int Dostuff(int Var1,long Var2)
     {
        。。。。。
     }
}

为什么要用一个接口?
还要在类中实现代码。
直接调用不就得?
可能我没开发遇到大一点项目与程序,体验出接口作用。
有那位朋友比较熟悉的,可以给我讲解下:
1.接口作用?
2.如何使用接口?
3.应用在什么场合?
谢谢
作者: 郭青松    时间: 2012-4-7 19:43
举个例子吧。
public interface IStudy
{
    //定义一个阅读文章的方法
   void  ReadLesson();
}
//在study类中具体实现
public class study:Istudy
{
    public void ReadLesson()
   {
        Console.WriteLine("我是实现了接口IStudy的方法。");
   }
}
一般情况我  我们都是这么调用的
Study S = new Study();
S.ReadLesson();
到这一步 你应该都能理解吧。

但此时 我的这个类实现了这个接口,那我还可以这么书写.
IStudy Ist = new Study();
接口的对象指向了实现了该接口类的实例。
这样就可以做到一个“筛选”的作用。
有时候,我们会定义很多个接口。
在C#中 接口是可以实现多继承的。
也就是说 一个继承了很多接口的类里,所有它里面就会有很多个实现方法,对应各种类的实现要求。
但是,如果 我们只需求当前类中的某一类功能,也就是某一个接口对当前类指定的功能。
比如说 我们 定义了一个学生类,但是定义了很多个和学生类有关的接口,比如 写作业的接口,需要同学类实现写作业这个功能。
比如说 逃课惩罚接口, 实现一个 如果同学逃课的话,就对其执行相应的触发实现。。。这种接口可以定义很多个
那么自然的 在实现接口的类中 就会有很多个 方法了。
这些方法 同属于当前类。但是 对于 被它实现的接口来说,接口的对象只能包含 当前类中为其实现的接口方法的功能而已。

如果使用传统模式,student s = new stuent();
S.可以点出很多个方法,但是我们只需要其中有特定功能的一些方法,那么这么方法在这 可能就有一点“扰乱视听”的感觉的。
这个时候,我们如果使用接口对象 指向对象实例的这种语法;
比如:
写作业接口  写作业  = new student();
那么 我们在 写作业.(写作业点)里面 就只会访问到 该类中实现了写作业接口中的那些方法,而不是全部。

还有一个 可能就比较深入了,有一个协变和抗变的这么个概念在里面。
在C#中  方法的参数是协变的,方法的返回类型是抗变的。
协变的意思是:如果参数类型为A 那么 自要是派生自A的数据类型都可以作为该方法的参数。(一个方法的参数为Object 的话,那么你可以给该方法传递任何数据类型的参数,因为所有数据类型都是继承自Object的)
抗变的意思是:如果方法的返回类型为A 那么只有A本身或者A的基类的数据类型才能代替该方法的返回类型。(一个方法的返回参数为Int 我们也可以返回一个Object数据类型,因为Object是Int的基类)


我想你可能一直在纠结 为什么 一个数据对象要要实现某个功能 为什么一定要实现另一个接口。原因是 此方法的参数是你必须实现的那个接口的接口类型,而微软一开始是不知道,你需要用到此方法的数据类型
是个什么类型的。但是 方法参数 是协变的,这样就很好啊 我管你是什么数据类型 只要你实现了 我定义的这个接口 我就可能让你用这个功能了。

如果看得不是很明白  建议 参考:C#高级编程第七版 “协变和抗变”
作者: yoosou2012    时间: 2012-4-7 19:58
接口其实就是类和类之间的一种协定,一种约束.
运用接口的目的是方便统一管理.另一个是方便调用.当然了,不使用接口一样可以达到目的.只不过这样的话,这种约束就不那么明显,假如这样类还有Duck类等等,比较多的时候难免有人会漏掉这样方法.所以说还是通过接口更可靠一些,约束力更强一些.

作者: 张静慈    时间: 2012-4-7 22:48
继承"基类"跟继承"接口"都能实现某些相同的功能,但有些接口能够完成的功能是只用基类无法实现的

1.接口用于描述一组类的公共方法/公共属性. 它不实现任何的方法或属性,只是告诉继承它的类
《至少》要实现哪些功能,继承它的类可以增加自己的方法.
2.使用接口可以使继承它的类: 命名统一/规范,易于维护.比如: 两个类 "狗"和"猫",如果它
们都继承了接口"动物",其中动物里面有个方法Behavior(),那么狗和猫必须得实现Behavior()方法,
并且都命名为Behavior这样就不会出现命名太杂乱的现象.如果命名不是Behavior(),接口会约束
即不按接口约束命名编译不会通过.

3.提供永远的接口。 当类增加时,现有接口方法能够满足继承类中的大多数方法,没必要
重新给新类设计一组方法,也节省了代码,提高了开发效率.
作者: 姜志钦    时间: 2012-4-8 07:55
接口就好比你要找对象的时候,你先列出一系列要求,这些要求就是接口,能够实现你这些要求的那一类人,就是你所要实现接口的类和对象!
作者: 刘真    时间: 2012-4-8 13:49
接口定义:接口可以包含方法、属性、事件和索引器;接口本身不提供它所定义的成员的实现;
接口只指定实现该接口的类或接口必须提供的成员。
使用接口需注意以下两点
1.实现接口的类需要实现所有接口方法
2.私有方法不能实现接口方法
接口的使用
接口好比一种模版,这种模版定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用。
接口不能被实例化。类可以实现多个接口并且通过这些实现的接口被索引。接口变量只能索引实现该接口的类的实例。
作者: pray    时间: 2014-4-26 04:29
支持你一下下。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2