您的位置:首页 > 编程语言 > C#

C# 抽象类与接口的区别

2012-03-29 19:06 225 查看
一、 定义

  抽象类:不与具体事物相联系,表达一种抽象的概念,仅是作为其派生类的一个基类。主要用来提供多个派生类可共享的基类的公共定义。

  接口:是一种用来定义程序的协议,它描述可属于任何类或结构的一组相关行为,可以看成是实现一组类的模板。

二、 相似之处

  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);
}
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: