日期:2014-05-17  浏览次数:20787 次

接口和类一样么?
c#对于接口和类的处理相同么?例如观察者模式中,"被观察者"的角色有 "被观察者"接口,被观察者基类,被观察者类三个层次,当实例化被观察者对象的时候,接口是不是和基类一样逐一被加载?一样处理么?

------解决方案--------------------
接口与抽象类类似,都可以看成是普通类的模板。
------解决方案--------------------
接口只是定义行为、并没有去实现
------解决方案--------------------
楼主应该问抽象类和接口有什么区别,这样,可比性才大
关于接口与类的区别:http://zhidao.baidu.com/question/324925804.html
关于接口与抽象类的区别:http://www.cnblogs.com/zhangzheny/archive/2007/12/24/1012790.html
------解决方案--------------------
接口跟类没可比性啊。 接口里面不能有实现。。
------解决方案--------------------
类是一些具体事例的抽象。包括一些方法,属性等
接口是供外部访问的接口,是一种公共的规范。
所以他们的作用不一样。
------解决方案--------------------
概念上是不一样的,简单说,子类与基类是 is-a 关系,类与接口是 can-do 关系
------解决方案--------------------
你所的这个模式,是非常累赘、雷人的。这个我们就不具体去展开说。

仅就你的问题而言,所谓“观察者”仅仅依赖所谓“被观察者鸡肋”,它在实现时并不知道有哪一种所谓“被观察者类”存在。因此在设计上,这个所谓的“被观察者基类”就是指接口即可,而所谓的“被观察者类”必需是实际实现了功能代码的具体类(而不是接口或者抽象类)。

至于你说的什么“类加载器”,它执行时能够加载“接口”吗?这就是完全糊涂的概念了。

最后我要告诉你一件非常“巧妙”的事情:不要像许多学java的理论书籍走火入魔的人那样空乏地套用一大堆雷人的名词,你要学习.net开发那么就要学习.net工程师比较务实和先进的一些术语,平常谈设计就用.net术语,而不要抱着老掉牙的、混沌地、非常基础、甚至因为有错误而过时了的那些java术语。


------解决方案--------------------
微软开发工具,从1993年之前,就建立了标准化的“事件”概念。直到今天在.net中,基本上也还是那种形式。无数的组件都使用那种机制,那纯粹是“手到擒来”的基本概念,没有什么人把事件夸大而写了什么了不起的《18个模式》之类的书,但是事件机制其实就是取代十几个设计模式的简单概念。我们根本不把这个取十几个雷人的名词,而是在具体的工程实践中去让人理解。

比如说我们调用 DataGrid 来一行行显示订单基本信息,但是订单的类型有上百种,全都显示在这个DataGrid中。我们的主程序(也就相当于你所谓的“类型加载器”)将各种类型不同(但是有着相同的“订单”父类型/接口)的订单放在一个List集合中绑定给DataGrid,并且主程序监听 DataGrid 的“开始编辑”事件,根据这个事件参数我们调用此事件的“编辑”方法(因为各个订单子类的对象都继承并实现了这个方法)。此时,我们并不知道将来还会有哪些具体的订单子类被开发出来,我们的这个程序程序就是通用的。

这种编程设计其实是最基本的设计时应该会的。如果不会,你在实际的工程开发中让有经验的人给你手把手地教一次就会了。
------解决方案--------------------
根据这个事件参数我们调用此事件的“编辑”方法  -->  根据这个事件参数我们调用此订单的“编辑”方法

我们轻松地用“事件”这个词儿,而不是“这个模式那个模式”地整出一大堆雷人的名词。

实际上GOF的设计模式,大多数都是实现了同一个依赖倒置原则,只不过“四人帮”不懂事件机制所以没有把它先抽象出来核心的事件概念而已。
------解决方案--------------------
楼主在钻牛角尖啊。观察者模式应该是从Java那里学来的,那么你对Java应该非常清楚才对,.NET和Java在实例化类型时是差不多的,除非指定调用基类的构造函数,否则基类的初始化过程是被无视的,而接口本身是不带构造函数的,因此根本无法初始化接口。我写一段示例代码你应该就可以明白了:
public class a{}
public class b:a
{
    public b:base(){}
}
红色部分是可以省略的,但是省略的话,基类的初始化就被无视了,如果是基于接口的派生,根本不存在base的调用