接口是一种用来定义程序的协议。他描述可属于任何类或结构的一组相关行为,可以把它看成是实现一组类的模板。接口可由方法、属性、事件和索引器或这四种成员类型的任何组合构成,但不能包含字段。类和结构可以像类继承基类一样从接口继承,而且可以继承多个接口,当类或结构继承接口时,它继承成员定义,但不继承成员的实现。
若要实现接口成员类或结构中的对应成员必须是公共的、非静态的,并且与接口成员具有相同的名称和签名。类或结构的属性和索引器可以为接口中定义的属性或索引器定义额外的访问器。接口可以声明一个带有get访问器的属性,而实现该接口的类可以声明同时带有get访问器的同一属性。但是如果属性或索引器使用显式实现,则访问器必须匹配。
另外,接口也可以继承其它接口,类可以通过其继承的基类或接口多次继承某个接口。在这种情况下,如果将该接口声明为新类的一部分,则类只能实现该接口一次,如果没有,将继承的接口声明为新类的一部分,其实现将由声明它的基类提供,基类可以使用虚拟成员实现接口成员,在这种情况下,继承接口的类可通过重写虚拟成员来更改接口行为。
程序界面:
程序代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class InterfaceIlanguage : Form
{
public InterfaceIlanguage()
{
InitializeComponent();
}
/// <summary>
/// 声明一个接口IStaffName,定义Name属性和Show方法,而方法具体代码功能的实现是在Staff类中实现的
/// </summary>
public interface IStaffName
{
string Name
{
get;
set;
}
void Show(string name);
}
/// <summary>
/// 声明一个接口IStaffId,定义Id属性和Show方法,而方法具体代码功能的实现是在Staff类中实现的
/// </summary>
public interface IStaffId
{
string Id
{
get;
set;
}
void Show(string id);
}
/// <summary>
/// 声明Staff类,继承IStaffName和IStaffId接口中的成员定义,实现输出Name和Id属性以及实现两个接口中的show方法
/// </summary>
public class Staff : IStaffName, IStaffId
{
private string vname;
public string Name
{
get
{
return vname;
}
set
{
vname = value;
}
}
private string vid;
public string Id
{
get
{
return vid;
}
set
{
vid = value;
}
}
void IStaffName.Show(string name)
{
MessageBox.Show("职员姓名是:"+name,"information");//实现IStaffName接口中的方法
}
void IStaffId.Show(string id)
{
MessageBox.Show("职员编号是:" + id, "information");//实现IStaffId接口中的方法
}
}
/// <summary>
/// 按钮事件,实例化Staff类,不能直接实例化接口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
Staff s = new Staff();
s.Name = tex_name.Text;
s.Id = tex_id.Text;
IStaffName sname = s;
sname.Show(s.Name);
IStaffId sid = s;
sid.Show(s.Id);
tex_result.Text = "职员姓名:"+s.Name +Environment.NewLine+ "职员编号:" + s.Id;
}
}
}
结语:
接口具有以下特征:
1、接口类似于抽象基类,继承接口的任何非抽象类型都必须实现接口的所有成员。
2、接口不能直接进行实例化
3、接口可以包含事件、索引器、方法和属性。
4、接口不包含方法的实现
5、类和结构可从多个接口继承
6、接口自身可从多个接口继承
C#中使用interface关键字声明接口,声明接口时通常以大写字母“I”开头。
通过类继承来实现一个类,虽然只能继承一个基类,但可以继承任意多个接口,声明实现接口的类时,需要在基类列表中包含类所实现的接口的名称。继承接口时必须在子类和接口之间用冒号“:”。另外,如果继承多个接口,那么在继承的每个接口之间用逗号“,”分割。
接口使得服务的协议与实现相分离,它是组件编程的基础。在组件编程中,接口是组件向外公布其功能的唯一方法。
喜欢的请关注、收藏、转发!
本文暂时没有评论,来添加一个吧(●'◡'●)