The wind call my name

用知识和思考来丈量世界
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

《Programming .Net Components》学习笔记(一)

Posted on 2007-04-28 21:45  徐鸿翼  阅读(819)  评论(3编辑  收藏  举报

 接口定义:

    public interface IMyInterface
    { 
         
void Method1();
         
void Method2();
         
void Method3();
     }

抽象类定义:

    public abstract class MyAbstractClass
    {
        
public abstract void Method1();
        
public abstract void Method2();
        
public abstract void Method3();
    }

两者的不同点:
1.       抽象类可以包含实现细节:成员变量,非抽象方法以及属性。接口不能包含任何实现细节或者成员变量。
2.       .Net类只能继承于一个基类,不管基类是否是抽象的。但是,.Net类可以实现任何多个接口请求。
3.       抽象类可以有非公共方法和属性,即使它们是抽象的。在接口中,定义的所有成员都是公共的。
4.       抽象类可以拥有静态方法,静态变量以及可以定义常量,接口则都不允许。
5.       抽象类可以拥有构造器,接口不可以。

接口和实现分离是面向组件编程的核心原则之一。这样做可以在不影响客户端的情况下,改变服务端的实现细节。虽然抽象类也可以实现客户端和服务端的分离,但因为抽象类仍可以包含实现细节,所以在服务端编程时还需顾虑到抽象类的内部实现,并没有到达真正意义上的“契约”效果。

而在接口中,不允许定义任何实现细节,使得客户端和服务端最大限度松耦合,服务提供者可以在不影响客户端的情况下自由改变实现细节。另外,因为在接口中只包含公共成员定义,所以任何的接口实现都应是公共的和良好定义的。在"提供服务的类"实现既定任务过程中,更加明晰的和良好定义的契约,能够减少冲突。一个接口可以扩展其他接口,而不可以是类。通过继承于一个已存在的接口,你可以定义一个新的专门的契约,继承此接口的类必须同时实现所有父接口的成员,而类则可以继承于多个接口。

学习编程不到两年,《Programming .Net Components, 2nd Edition》是我阅读的第二本原版书籍(第一本是《Head First Design Pattern》),不足和错误之处请大家不吝指正,谢谢:)

蓝色语句原句:The more explicit and well defined a contract is, the less likely it is that there will be conflicts down the road regarding exactly what the class providing the service is required to do.

请帮忙翻译一下,感觉很不准啊。。