在.NET 应用程序设计中如何选择Class, Abstract Class and Interface
2015-03-06 18:30
477 查看
关键字:
Type– 类型
Class - 类
Abstract - 抽象的
Interface - 接口
Member - 成员
Method - 方法
Property - 属性
预备知识:在阅读本文时,您应当了解.NET编程的基本知识并且已经掌握Class, Abstract Class 和 Interface全部知识。这里我仅简单介绍一下他们的基本知识。本文的例子由C#编写。期望您对C#编程有一定的了解。
正文:
我们无法创建一个Abstract Class或Interface的实例(INSTANCE)。让我们从Abstract Class和Interface的定义来看他们的不同。Abstract Class可以包含Abstract Methods 和 Abstract Properties, 也可以包含其他的Members,象正常的Class一样。而Interface只能包含Abstract Methods和Properties(属性)。Interface中的所有Methods和Properties不需要加Abstract和 Public关键字,因为这两个关键字在Interface中是默认的。举例如下:
通常来讲,在设计时优先考虑使用Class或Abstract Class而不是Interface。Interface的主要缺点是灵活性比较差。一旦你定义好了Interface,那么它的Members就固定 了。如果你要对已经发布的程序添加新的Method,就会破坏你已经的实现该接口的Type(Class,Struct等)。因为你必须在你已有的 Type中实现新的方法,否则你的程序将无法通过编译。
例如类Car和Train实现了接口Vehicles. 现在我们要给接口Vehicles再加一个方法Brake(). 如果我们现在编译类Car和Train,编译器将报错。
如果我们使用抽象类或正常类Vehicles,我们仅仅需要在类Vehicles中添加Brake()方法并且实现这个方法。然后我们根据具体需要来决定是否要覆盖类Car 或Train中的Brake()方法。
Class则可以提供更好的灵活性。你可以给Class添加任何Members,只要添加的不是Abstract Method即可(也就是说你要提供一个有具体实现的方法)。这样就不会影响从该Class继承的类,已有代码无需做任何改变。
设计原则
• 优先考虑使用Class或Abstract Class而不是Interface。
• 使用Abstract Class代替Interface来降低Class继承层次之间的耦合关系。
• 使用Interface,如果你需要给一个值类型实现(Value Type, 象STRUCT就是值类型)多态继承(Polymorphic Hierarchy)。(值类型除了从Interface继承以外,不能从其他Type继承)。
• 在需要多重继承的情况下,可以考虑使用Interface。
Type– 类型
Class - 类
Abstract - 抽象的
Interface - 接口
Member - 成员
Method - 方法
Property - 属性
预备知识:在阅读本文时,您应当了解.NET编程的基本知识并且已经掌握Class, Abstract Class 和 Interface全部知识。这里我仅简单介绍一下他们的基本知识。本文的例子由C#编写。期望您对C#编程有一定的了解。
正文:
我们无法创建一个Abstract Class或Interface的实例(INSTANCE)。让我们从Abstract Class和Interface的定义来看他们的不同。Abstract Class可以包含Abstract Methods 和 Abstract Properties, 也可以包含其他的Members,象正常的Class一样。而Interface只能包含Abstract Methods和Properties(属性)。Interface中的所有Methods和Properties不需要加Abstract和 Public关键字,因为这两个关键字在Interface中是默认的。举例如下:
//Abstarct Class public abstract class Vehicles { private int noOfWheel; private string color; public abstract string Engine { get; set; } public abstract void Accelerator(); } //Interface public interface Vehicles { string Engine { get; set; } void Accelerator(); }
通常来讲,在设计时优先考虑使用Class或Abstract Class而不是Interface。Interface的主要缺点是灵活性比较差。一旦你定义好了Interface,那么它的Members就固定 了。如果你要对已经发布的程序添加新的Method,就会破坏你已经的实现该接口的Type(Class,Struct等)。因为你必须在你已有的 Type中实现新的方法,否则你的程序将无法通过编译。
例如类Car和Train实现了接口Vehicles. 现在我们要给接口Vehicles再加一个方法Brake(). 如果我们现在编译类Car和Train,编译器将报错。
public interface Vehicles { … //新添加的方法 void Brake(); } 要修复这个错误,我们不得不在类Car和Train中实现方法Brake(). 示范代码如下: public class Car : Vehicles { … public void Brake() { System.Console.WriteLine("Stop your car”); } } public class Train : Vehicles { … public void Brake() { System.Console.WriteLine("Stop your train”); } }
如果我们使用抽象类或正常类Vehicles,我们仅仅需要在类Vehicles中添加Brake()方法并且实现这个方法。然后我们根据具体需要来决定是否要覆盖类Car 或Train中的Brake()方法。
public abstract class Vehicles { … //新添加的方法,无需在它的子类中覆盖这个方法。 public void Brake() { System.Console.WriteLine("Stop your vehicles”); } }
Class则可以提供更好的灵活性。你可以给Class添加任何Members,只要添加的不是Abstract Method即可(也就是说你要提供一个有具体实现的方法)。这样就不会影响从该Class继承的类,已有代码无需做任何改变。
设计原则
• 优先考虑使用Class或Abstract Class而不是Interface。
• 使用Abstract Class代替Interface来降低Class继承层次之间的耦合关系。
• 使用Interface,如果你需要给一个值类型实现(Value Type, 象STRUCT就是值类型)多态继承(Polymorphic Hierarchy)。(值类型除了从Interface继承以外,不能从其他Type继承)。
• 在需要多重继承的情况下,可以考虑使用Interface。
相关文章推荐
- 在.net 应用程序设计中如何选择class, abstract class ...
- 在.NET 应用程序设计中如何选择Class, Abstract Class and Interface
- 类(class)和结构(struct)的区别是什么?它们对性能有影响吗?.NET BCL里有哪些是类(结构),为什么它们不是结构(类)?在自定义类型时,您如何选择是类还是结构?
- (转)类(class)和结构(struct)的区别是什么?它们对性能有影响吗?.NET BCL里有哪些是类(结构),为什么它们不是结构(类)?在自定义类型时,您如何选择是类还是结构?
- 如何在运行时的Form上画出如设计时期的选择多个控件的虚框
- .NET中的设计模式三:组合模式 选择自 lane_cn 的 Blog
- 设计 .NET 应用程序(转)
- 网格基础设施如何影响应用程序的设计
- .NET中的设计模式一:工厂模式 选择自 lane_cn 的 Blog
- 网页设计中如何正确的使用 id 和 class
- 通过用 .NET 生成自定义窗体设计器来定制应用程序
- 设计可用性很高的.NET应用程序
- 如何部署基于水晶报表10和Oracle10g的.NET应用程序
- .net应用程序如何批上XP的外衣?
- [原版].NET 菜鸟如何 学习 设计模式 [不断修改中]
- [编程]如何减少.Net应用程序启动时占用的内存 [2007-04-02 更新]
- .net应用程序如何批上XP的外衣?
- .net应用程序如何批上XP的外衣?
- 如何快速的发展出吻合Java 2 platform Enterprise Edition的应用程序 选择自 jiangtao 的 Blog
- [转载]ASP.NET Web 服务还是 .NET Remoting:如何选择,使用 Microsoft .NET 建立分布式应用程序