C#接口的实现和继承实践
1.基本概念
接口是一种契约规范,类似于抽象基类。包括方法,属性,索引器和事件作为成员,这些成员只是作为定义,并不在接口中具体实现。
接口创建时注意以下事项:
- 继承接口的任何非抽象类都必须实现接口的所有成员
- 不能直接实例化接口
- 接口可以包含事件,索引器,属性和方法,不包括方法的实现
- 类和结构可从多个接口继承,中间用“,”隔开
- 接口自身可从多个接口继承
接口声明格式如下
修饰符 interface 接口名称:继承接口列表(非继承接口可省去该部分)
{
接口内容:属性,方法,索引器,事件
}
2.使用实例
如定义一个信息类接口,包含编码和名称属性及信息显示方法。
通过销售类信息和进货类信息继承该接口。
整个文档接口如下:
- 接口定义
1 namespace CSCOMExample 2 { 3 public interface Informatioin 4 { 5 string Code { get; set; } //编码属性 6 string Name { get; set; }//名称属性 7 void ShowInfo();//输出信息方法 8 } 9 10 }
- 进货类
1 namespace CSCOMExample 2 { 3 4 /// <summary> 5 /// 进货信息继承接口 6 /// </summary> 7 public class JHInfo : Informatioin //继承接口 8 { 9 string code = ""; 10 string name = ""; 11 /// <summary> 12 /// 实现编码属性 13 /// </summary> 14 public string Code 15 { 16 get { return code; } 17 set { code = value; } 18 } 19 /// <summary> 20 /// 实现名称属性 21 /// </summary> 22 public string Name 23 { 24 get { return name; } 25 set { name = value; } 26 } 27 /// <summary> 28 /// 实现进货显示信息方法 29 /// </summary> 30 void Informatioin.ShowInfo() 31 { 32 Console.WriteLine("进货信息:\n" + Code + " " + Name); 33 } 34 } 35 }
- 销售类
1 namespace CSCOMExample 2 { 3 /// <summary> 4 /// 销售信息继承接口 5 /// </summary> 6 public class XSInfo : Informatioin //继承接口 7 { 8 string code = ""; 9 string name = ""; 10 /// <summary> 11 /// 实现编码属性 12 /// </summary> 13 public string Code 14 { 15 get { return code; } 16 set{code =value; } 17 } 18 /// <summary> 19 /// 实现名称属性 20 /// </summary> 21 public string Name 22 { 23 get{return name; } 24 set { name=value; } 25 } 26 /// <summary> 27 ///销售信息显示方法 28 /// </summary> 29 void Informatioin.ShowInfo() 30 { 31 Console.WriteLine("销售信息:\n" + Code + " " + Name); 32 } 33 } 34 }
以上,分别在JHInfo类和XSInfo类中对接口的属性和方法进行了实现。如此,一个信息接口Information就完成了。
再做一个测试程序,检测接口:
1 namespace ComText 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 Informatioin[] Infos = { new JHInfo(), new XSInfo() };//定义接口数组 8 Infos[0].Code = "JH0001"; 9 Infos[0].Name = "笔记本电脑"; 10 Infos[0].ShowInfo(); 11 12 Infos[1].Code = "XS0001"; 13 Infos[1].Name = "荣耀手机"; 14 Infos[1].ShowInfo(); 15 Console.ReadLine(); 16 } 17 } 18 }
输出结果如下:
心未老,即奋不顾身!