日期:2014-05-19  浏览次数:21088 次

接口 有深刻体会的人请进

          我暂时体会到的是只是表示许多继承了此接口的类都具有同名的方法,而且必须得由类重写方法,那么是不是意味着这些同名的方法的具体实现也不需要一样??既然这样,请问c#中的接口起什么作用呢??

------解决方案--------------------
比如说你有一个写日志的类,有一个方法 WriteLog,此方法需要提供一个参数,也就是写到日志中的内容,如类型,日志内容,引发此日志的原因等等。因为这个参数要提供很多的东西,所以不便使用一个简单类型,要使用一个类。但是类可能是各种各样的,不同的类的属性方法等都不一样,随便用一个类作为参数,程序也不好处理。这时就要用到接口。你定义一个日志内容的接口,然后 WriteLog 方法的参数就用这个接口类型。程序运行时,WriteLog 可不管传入的参数是什么A类或者B类,只要是这些类都实现了这个接口,就可以拿来用。而不同的类,不管实现什么样的功能,只要想写日志,只需实现这个接口,就可以当作 WriteLog 的参数。


------解决方案--------------------
当然可以不一样!如果一样的话,用继承类就行了。接口中的方法只定义结构,具体实现就看着办吧。比如一个接口,有一个方法:GetValue ,返回为 String,那么实现该接口的类在实现此方法时,不管它的代码是什么,哪怕是千差万别,只要你给我返回 String 就行了,其它的我统统不管。
------解决方案--------------------
一个开关,就得有开和关的功能.只要你是做开关的工厂.你就得实现开和关的功能,至于你怎么实现,接口不管.你是用拉的,转的,按的都行.其实接口也可以间接掉用方法.例如:
在二个接口中有二个方法名相同的方法:
public interface Ia
{
void disp();
}
public interface Ib
{
void disp();
}
public class C:Ia,Ib
{
void Ia.disp()
{
//接口Ia方法的重写
}
void Ib.disp()
{
//接口Ib方法的重写
}
}
public class Demo
{
static void Main(string [] arr)
{
C c = new C();
Ia a = c;//把Ia接口的引用指向类c的对像
a.disp();
Ib b = c;//把Ib接口的引用指向类c的对像
b.disp();
}
}
这样就可以分别调到不同的方法了.感觉是接口打点调用的方法其实它是通过类来间接实现的.
在Java中数据库操作中的Statement接口就是一个很好的例子.