C# 接口的问题。抽象类

理论的看不懂,请发上简单的代码,然后容易理解的讲解下,还有接口的什么时候用的到,还有什么地方要注意。反之同上请讲下抽象类。
诚心提问最后100分了,越详细越好,最好是个人经验!!
最后我自己的理解,比如接口里要有1个方法是不是只是先声明下,具体实现在继承它的类中吗?

说自己经验啊..怕你一下不理解

总结起来说,使用C#接口应注意几个问题:

1、C#中的接口是独立于类来定义的。这与 C++模型是对立的,在 C++中接口实际上就是抽象基类。
2、接口和类都可以继承多个接口。
3、类可以继承一个基类,接口根本不能继承类。这种模型避免了 C++的多继承问题,C++中不同基类中的实现可能出现冲突。因此也不再需要诸如虚拟继承和显式作用域这类复杂机制。C#的简化接口模型有助于加快应用程序的开发。
4、一个接口定义一个只有抽象成员的引用类型。C#中一个接口实际所做的,仅仅只存在着方法标志,但根本就没有执行代码。这就暗示了不能实例化一个接口,只能实例化一个派生自该接口的对象。
5、接口可以定义方法、属性和索引。所以,对比一个类,接口的特殊性是:当定义一个类时,可以派生自多重接口,而你只能可以从仅有的一个类派生。

接口的使用环境:
当某<一些> 对象 他们拥有<很多> 类似的方法时.需要用到接口

给你举一个最最现实的例子......
做通信
每一个客户机都有一个断开方法
但是这个断开方法有自己的逻辑
另外由于你要做:文件传输,视频传输,文字传输
那么
这几个的对象实例,是不一样滴..
他们的逻辑不同
但是.他们都需要:获取SOCKET.解析BYTE数组
获取来源,发送反馈.等
那么这些 东西都定义为接口
这就是接口的经典使用范例

什么反射.什么抽象工厂框架集..等你先知道什么时候该用接口的时候再说吧

抽象类.这玩意如同名字一个样.都是需要完全靠思维理解的
1)在继承抽象类时,必须覆盖该类中的每一个抽象方法,而每个已实现的方法必须和抽象类中指定的方法一样,接收相同数目和类型的参数,具有同样的返回值,这一点与接口相同。
2)当父类已有实际功能的方法时,该方法在子类中可以不必实现,直接引用的方法,子类也可以重写该父类的方法(继承的概念)。
3)而实现 (implement)一个接口(interface)的时候,是一定要实现接口中所定义的所有方法,而不可遗漏任何一个。
4)另外,抽象类是不能产生对象的,但可以由它的实现类来声明对象。

这是百度百科的文字

有鉴于此,在实现接口时,我们也常写一个抽象类,来实现接口中的某些子类所需的通用方法,接着在编写各个子类时,即可继承该抽象类来使用,省去在每个都要实现通用的方法的困扰。
按照1)的规则.如果你继承,则表示必须有这些方法
按照2)的规则似乎跟1冲突,但是也有小部分作用.例如我规定好你要怎么做.你就可以不重写.但这是扯淡. 一般用是否允许重写标记来实现限制
另外.3)表示他与接口的不同之处
4)他不能声明..那要他作甚= =
抽象类的作用,如果你有一个全局对象,至于你的执行环境..我就不清楚,也不知道啦..就用抽象类

说一个直接的
例如你上学的时候应该做过一道题(个人猜测北大青鸟滴..如果说错见谅)
叫什么一个青蛙呱呱叫什么玩意的..忘了= =很多面试的都这么给我解释..

那道题其实按照逻辑来说.是不对滴.
首先.在人这个对象没有实现具体的接口,被某一个具体实例继承的情况下
你创造这个实例有意义么?
人他这个对象有点范围略大吧

所以呢.人应该就是抽象类

嗯..我能给你码字解释差不多就这么多了
其他的你自己脑补吧.

最后我自己的理解,比如接口里要有1个方法是不是只是先声明下,具体实现在继承它的类中吗?
你问的这句话表示你连我刚才从网上贴的基本定义都没弄清楚

接口基本定义:所有内容,只能定义不能实现,他一般作为一个具体实例的特殊操作的抽象定义出现
抽象类:白话的定义就是:一个范围极其大的定义.没有实际意义.但是他是所有子类的父类.例如我所述的<人>
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-07
接口是实现类的多态用,你在初期会认为根类一样的玩意,多此一举,但是在一个框架中,没有接口这种东西根本无法完成,你写了一段代码在一个事件函数中,什么时候这个框架运行呢?这都是接口,简单的时候你无法理解------这就是面向对象的强大,让大家协作起来修房子一样,架构是工程师弄个的,我们是农民工只在button控件的click填点代码。实际的封装就要用到接口、委托、事件,当然你也可以用用。
第2个回答  推荐于2016-03-17

写了两个例子,可以下载下来参考一下

说说自已的理解吧,有什么不对的地方,请指证,就不说什么理论了,举个例子说一下

楼主理解的没错,接口只声名方法,没有方法体,具体实现在它实现类中.

举个例子:

我想在一个函数中画一个矩形

定义一个矩形类

public class Rectangle {

      public void Draw() {

             //画矩形

      }

}

//在这个函数中调用Rectangle类的Draw方法画矩形

public void DrawShape(Rectangle shape) {

          shape.Draw();

}

可是我又在这个函数中画圆,怎么办呢

public class Circle {

          public void Draw() {

              //画圆

         }

}

//我还得再定义一个函数调用Circle类的Draw方法画圆

public void DrawShape(Circle shape) {

          shape.Draw();

}

...

如果我要有好多形状是不是要定义很多这样的函数呢?有没有更好办法呢?

当然有,利用抽象类或者接口,可以解决,我们可以先定义一个接口,接口有一个绘制的方法,具体实现由子实现

public interface IShape {

      void Draw();

}


public class Rectangle : IShape{

        public void Draw() {

          //画矩形

        }

}


public class Circle : IShape {

         public void Draw() {

              //画圆

         }

}


这样矩形和圆实现了同一个接口,也就是可以通过这一个接口,调用不同子类的Draw方法

public void DrawShape(IShape shape) {

           shape.Draw();

}


IShape shape = new Rectangle(); //创建一个矩形

DrawShape(shape); //画矩形


IShape shape = new Circle();//创建一个圆

DrawShape(shape);

这个样就可以只定义一个绘制函数,可以绘制不同的图形,这就是接口的魅力

抽象类与类似,只不过抽象的方法可以有方法体,可在在子类中进行重写(覆盖).


本回答被提问者采纳
第3个回答  2013-05-07
那要看什么接口
第4个回答  2013-05-08
已经删除!
相似回答
大家正在搜