C# 抽象类与接口的区别
2012-03-29 19:06
225 查看
一、 定义
抽象类:不与具体事物相联系,表达一种抽象的概念,仅是作为其派生类的一个基类。主要用来提供多个派生类可共享的基类的公共定义。
接口:是一种用来定义程序的协议,它描述可属于任何类或结构的一组相关行为,可以看成是实现一组类的模板。
二、 相似之处
1.都是引用类型
2.不能直接实例化
3. 包含未实现的方法声明
4. 派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(方法、属性、事件、索引器或这4种成员的任何组合)
三、 区别
1.抽象类是为子类提供一个自定义抽象的基类。而接口是为子类定一个规则。
2.抽象类中可以定义成员的实现,但接口中不可以
3.抽象类不能被密封。
4.如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法。
5.抽象类中可以包含字段、构造函数、析构函数、静态成员或常量等,接口中不可以。
6.抽象类中的成员可以私有的、受保护的、内部的或受保护的内部成员,但接口中的成员必须是公共的。
四、动机
抽象类是为了继承实现代码重用。接口是为了实现多态性。
下面分别是抽象类和接口的简单示例:
View Code
抽象类:不与具体事物相联系,表达一种抽象的概念,仅是作为其派生类的一个基类。主要用来提供多个派生类可共享的基类的公共定义。
接口:是一种用来定义程序的协议,它描述可属于任何类或结构的一组相关行为,可以看成是实现一组类的模板。
二、 相似之处
1.都是引用类型
2.不能直接实例化
3. 包含未实现的方法声明
4. 派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(方法、属性、事件、索引器或这4种成员的任何组合)
三、 区别
1.抽象类是为子类提供一个自定义抽象的基类。而接口是为子类定一个规则。
2.抽象类中可以定义成员的实现,但接口中不可以
3.抽象类不能被密封。
4.如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法。
5.抽象类中可以包含字段、构造函数、析构函数、静态成员或常量等,接口中不可以。
6.抽象类中的成员可以私有的、受保护的、内部的或受保护的内部成员,但接口中的成员必须是公共的。
四、动机
抽象类是为了继承实现代码重用。接口是为了实现多态性。
下面分别是抽象类和接口的简单示例:
View Code
namespace 利用接口选择实现不同的语言 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /// <summary> /// 声明一个借口,用于定义Speak方法,而具体Speak方法的功能的实现是在类中进行的。 /// </summary> interface IselectLanguage { void Speak(string str); } /// <summary> /// 如果与中国人说话则说汉语 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> class C_SpeakChinese : IselectLanguage { public void Speak(string str) { MessageBox.Show("您对中国友人说:"+str,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information); } } /// <summary> /// 如果与美国人对话,则说英语 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> class C_SpeakEnglish : IselectLanguage { public void Speak(string str) { MessageBox.Show("您对美国友人说:"+str,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information); } } private void button1_Click(object sender, EventArgs e) { if (comboBox1.Text == (string)comboBox1.Items[0]) { this.textBox1.Text = "编程词典好用!"; C_SpeakChinese c1 = new C_SpeakChinese(); c1.Speak(textBox1 .Text); } else { this.textBox1.Text = "how are you ?"; C_SpeakEnglish c2 = new C_SpeakEnglish(); c2.Speak(this.textBox1.Text); } } } }
相关文章推荐
- 艾伟:C#中抽象类和接口的区别
- 【原创】抽象类和接口的区别(C#)
- C#中的虚方法、抽象方法、抽象类、接口的联系与区别
- C#中接口与抽象类的区别
- C#中抽象类和接口的区别
- C#中抽象类和接口的区别(转)
- C#中抽象类和接口的区别
- c#接口和抽象类的区别
- C#中抽象类和接口的区别
- C#温故而知新学习系列之面向对象编程—接口和抽象类的区别是什么?(十八)
- C# 抽象类和接口有什么区别?
- C#的抽象类和接口,区别与相似
- C#接口和抽象类的区别
- c#接口和抽象类的区别[转]
- C#中抽象类与接口的区别之处
- C#中抽象类和接口的区别
- c#接口和抽象类的区别
- C#接口与抽象类区别实例
- C#中抽象类和接口的区别
- C#中抽象类和接口的区别