All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
数据库正规化和设计技巧(3)_mssql学习_编程技术
PHP函数:PHP的通用检测函数总结_[PHP教程]
ASP.NET中实现模版的动态加载_[Asp.Net教程]
LINQ体验(17)——LINQ,to,SQL语句之动态查询_[Asp.Net教程]
。Net开发环境配置
XP下Asp.net访问被拒绝_[Asp.Net教程]
访问本机IIS站点被要求输入用户名和密码_[Asp.Net教程]
C#中的throw语句使用方法
PHP学习宝典-第八章(一)_[PHP教程]
黑客攻破SQL服务器系统的十种方法_[SQL,Server教程]
Reading number is top 10 pictures
南昌铁路局宜春车务段攸县车站铁路职工福利房被开发商侵占
Breasts woman big set 1
Female model behind the bitterness, often being overcharged4
Steal to eat bacon bird
The Soviet union swimsuit exposure in the 70 year1
福利是必须的
避免防盗门的猫眼变成钥匙眼
采访谢楠
China's ambassador to Libya embassy was shock, and the glass is broken in
Seductive beauty of crime1
Download software ranking
网络管理员第三版
Boxer's Top ten classic battle7
Kung fu panda - the secret of the teacher
Boxer vs Yellow4
Boxer's Top ten classic battle1
c#程序设计案例教程
WebService在.NET中的实战应用教学视频 → 第4集
jdk1.5
Boxer vs Yellow1
The cock of the Grosvenor LTD handsome
归海一刀 published in(发表于) 2014/1/30 1:30:55 Edit(编辑)
什么是.net的接口和抽象类_[Asp.Net教程]

什么是.net的接口和抽象类_[Asp.Net教程]

什么是.net的接口和抽象类_[Asp.Net教程]
  什么是接口?
  接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值。接口方法不能包含任何实现,CLR允许接口可以包含事件、属性、索引器、静态方法、静态字段、静态构造函数以及常数。但是注意:C#中不能包含任何静态成员。一个类可以实现多个接口,当一个类继承某个接口时,它不仅要实现该接口定义的所有方法,还要实现该接口从其他接口中继承的所有方法。
  定义方法为:


public interface System.IComparable
{
 int CompareTo(object o);
}

public class TestCls: IComparable
{
 public TestCls()
 {
 }
 private int _value;
 public int Value
 {
  get { return _value; }
  set { _value = value; }
 }
 public int CompareTo(object o)
 {
  //使用as模式进行转型判断
  TestCls aCls = o as TestCls;
  if (aCls != null)
  {
    //实现抽象方法
    return _value.CompareTo(aCls._value);
  }
 }
}


  什么是抽象类?
  抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。抽象类不能实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用new关键字,也不能被密封。如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。另外,实现抽象方法由overriding方法来实现。
  定义方法为:

///
/// 定义抽象类
///

abstract public class Animal
{
 //定义静态字段
 static protected int _id;
 //定义属性
 public abstract static int Id
 {
  get;
  set;
 }
 //定义方法

 public abstract void Eat();
  //定义索引器
 public string this[int i]
 {
  get;
  set;
 }

 ///
 /// 实现抽象类
 ///

 public class Dog: Animal
 {
  public static override int Id
  {
    get {return _id;}
    set {_id = value;}
  }
  public override void Eat()
  {
    Console.Write("Dog Eats.")
  }
 }

 3. 相同点和不同点
  3.1 相同点
  都不能被直接实例化,都可以通过继承实现其抽象方法。
  都是面向抽象编程的技术基础,实现了诸多的设计模式。
  3.2 不同点
  接口支持多继承;抽象类不能实现多继承。
  接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现的成员。
  接口是一组行为规范;抽象类是一个不完全的类,着重族的概念。
  接口可以用于支持回调;抽象类不能实现回调,因为继承不支持。
  接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。
  接口可以作用于值类型和引用类型;抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。
  通过相同与不同的比较,我们只能说接口和抽象类,各有所长,但无优略。在实际的编程实践中,我们要视具体情况来酌情量才,但是以下的经验和积累,或许能给大家一些启示,除了我的一些积累之外,很多都来源于经典,我相信经得起考验。所以在规则与场合中,我们学习这些经典,最重要的是学以致用,当然我将以一家之言博大家之笑,看官请继续。
  3.3 规则与场合
  请记住,面向对象思想的一个最重要的原则就是:面向接口编程。
  借助接口和抽象类,23个设计模式中的很多思想被巧妙的实现了,我认为其精髓简单说来就是:面向抽象编程。
  抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。
  接口着重于CAN-DO关系类型,而抽象类则偏重于IS-A式的关系;
  接口多定义对象的行为;抽象类多定义对象的属性;
  接口定义可以使用public、protected、internal 和private修饰符,但是几乎所有的接口都定义为public,原因就不必多说了。
  “接口不变”,是应该考虑的重要因素。所以,在由接口增加扩展时,应该增加新的接口,而不能更改现有接口。
  尽量将接口设计成功能单一的功能块,以.NET Framework为例,IDisposable、IDisposable、IComparable、IEquatable、IEnumerable等都只包含一个公共方法。
  接口名称前面的大写字母“I”是一个约定,正如字段名以下划线开头一样,请坚持这些原则。
  在接口中,所有的方法都默认为public。
  如果预计会出现版本问题,可以创建“抽象类”。例如,创建了狗(Dog)、鸡(Chicken)和鸭(Duck),那么应该考虑抽象出动物(Animal)来应对以后可能出现风马牛的事情。而向接口中添加新成员则会强制要求修改所有派生类,并重新编译,所以版本式的问题最好以抽象类来实现。
  从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现。
  对抽象类不能使用new关键字,也不能被密封,原因是抽象类不能被实例化。
  在抽象方法声明中不能使用 static 或 virtual 修饰符。
  4. 经典示例
  4.1 绝对经典
  .NET Framework是学习的最好资源,有意识的研究FCL是每个.NET程序员的必修课,关于接口和抽象类在FCL中的使用,我有以下的建议:
  FCL对集合类使用了基于接口的设计,所以请关注System.Collections中关于接口的设计实现;
  FCL对数据流相关类使用了基于抽象类的设计,所以请关注System.IO.Stream类的抽象类设计机制。
  4.2 别样小菜
  下面的实例,因为是我的理解,因此给经典打上“相对”的记号,至于什么时候晋升为“绝对”,就看我在.NET追求的路上,是否能够一如既往的如此执着,因此我将把相对重构到绝对为止(呵呵)。 本示例没有阐述抽象类和接口在设计模式中的应用,因为那将是另一篇有讨论价值的文本,本文着眼与概念和原则的把握,但是真正的应用来自于具体的需求规范。


添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.