C# interface学习经验浅谈

开发 后端
C# interface学习是我们学习C#语言的一个重点,那么如何掌握好C# interface的使用规则呢?那么本文就向你介绍一些C# interface学习的经验和体会。

C# interface是把所需成员组合起来,以封装一定功能的集合。它好比一个模板,在其中定义了对象必须实现的成员,通过类或结构来实现它。接口不能直接实例化,即ICount ic=new iCount()是错的。接口不能包含成员的任何代码,只定义成员本身。接口成员的具体代码由实现接口的类提供。接口使用interface关键字进行声明。声明格式如下:

  1. [attributes] [modifiers]   
  2. interface identifier   
  3. [: base-list] {interface-body} {;} 

C# interface成员的默认访问方式是public,在声明接口成员时不能出现abstract、public、protected、internal、private、virtual、override或static等关键字。接口成员可以是方法、属性、索引指示器或事件,不能是字段,而且接口的成员名不能相同。

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4.  
  5. namespace Interface  
  6. {  
  7. interface ICount  
  8. {  
  9. void Count();//接口成员的默认访问方式是public  
  10. //int number;//接口中不能定义字段成员  
  11. int para { get;set;}  
  12. }  
  13.  
  14. class Double : ICount  
  15. {  
  16. public void Count()  
  17. //实现ICount的Count()方法  
  18. Console.WriteLine("The double para is {0}",2*para);  
  19. }  
  20. int p;  
  21. public int para  
  22. {  
  23. get { return p; }  
  24. set { p = value; }  
  25. }  
  26. }  
  27.  
  28. class Program  
  29. {  
  30. static void Main(string[] args)  
  31. {  
  32. Double d = new Double();  
  33. d.para = 10;//给"属性"赋值  
  34. d.Count();  
  35.  
  36. ICount ic = (ICount)d;//转换为接口  
  37. ic.para = 5;  
  38. ic.Count();  
  39. Console.ReadLine();  
  40. }  
  41. }  
  42. }  

C# interface的一点使用总结

1 一个类可以实现一个以上的接口;

2 类必须实现接口中的“所有”属性和方法;

3 属性和方法定义所采用的格式必须与接口定义所采用的格式完全相同。方法所采用的参数数目及参数类型必须与接口中的完全相同。方法的名称也必须相同。

接口之间的继承:接口的继承仅仅说明了接口之间的继承关系,派生的接口继承了父接口的成员说明,没有继承父接口的实现。private和internal类型的接口不允许继承。如果派生接口中准备重写父接口的方法,实现方式同类的继承成员的覆盖。

如果一个类实现了某个接口,即使父接口没有在类的基类表中列出,这个类也隐式地继承了接口的所有父接口。

如果两个接口A和B含有同名的成员Method,且都由同一个类C实现,则类C必须分别为A和B的Method成员提供单独的实现,即显式实现接口成员。可行方案:

(1)直接实现一个接口的成员,显式实现另一个接口的成员;

(2)显式实现两个接口的成员

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4.  
  5. namespace Interface  
  6. {  
  7. interface IEnglish  
  8. {  
  9. float Length();  
  10. float Width();  
  11. }  
  12. interface IMetric  
  13. {  
  14. float Length();  
  15. float Width();  
  16. }  
  17. class Class1 : IEnglish, IMetric  
  18. {  
  19. float lengthInches;  
  20. float widthInches;  
  21. public Class1(float length, float width)  
  22. {  
  23. lengthInches = length;  
  24. widthInches = width;  
  25. }  
  26. //显式实现IEnglish的成员  
  27. float IEnglish.Length()  
  28. {  
  29. return lengthInches;  
  30. }  
  31. float IEnglish.Width()  
  32. {  
  33. return widthInches;  
  34. }  
  35. //显式实现IMetric的成员  
  36. float IMetric.Length()  
  37. {  
  38. return lengthInches * 2.54f;  
  39. }  
  40. float IMetric.Width()  
  41. {  
  42. return widthInches * 2.54f;  
  43. }  
  44.  
  45. static void Main(string[] args)  
  46. {  
  47. Class1 c1 = new Class1(30.0f,20.0f);  
  48. IEnglish e=(IEnglish)c1;  
  49. IMetric m=(IMetric )c1;  
  50. Console.WriteLine("Length(in):{0}",e.Length());  
  51. Console.WriteLine("Width(in):{0}",e.Width());  
  52. Console.WriteLine("Length(cm):{0}",m.Length());  
  53. Console.WriteLine("Width(cm):{0}",m.Width());  
  54. Console.ReadLine();  
  55. }  
  56. }  
  57.  
  58. }  

执行结果:

C# interface学习的一些体会和具体的实例演示就向你介绍到这里,希望对你了解和学习C# interface有所帮助。

【编辑推荐】

  1. 浅析C#接口特点及实例应用
  2. C# interface实例浅析
  3. C# interface编程应用浅析
  4. C#interface定义及使用浅析
  5. C#显式实现接口原理浅析
责任编辑:仲衡 来源: CSDN博客
相关推荐

2009-08-28 12:25:58

C#静态方法

2009-08-20 15:33:03

C#跳跃语句

2009-08-25 16:14:06

C#使用ADOX

2009-08-31 15:48:02

C# Singleto

2009-08-26 17:24:49

C# Mutex对象

2009-08-13 18:13:27

C#学习经验

2009-08-19 16:36:29

C#管道技术

2009-08-19 10:25:18

C#托管资源

2009-08-13 15:03:58

C#结构体变量

2009-08-12 15:55:12

C#接口定义

2009-08-11 14:20:41

C# .NET学习经验

2009-08-27 13:45:45

C#别名指示符

2009-09-04 14:30:28

C#读取BLOB数据

2009-08-31 16:51:11

C# Main()方法

2009-08-27 09:27:49

C#扩展方法

2009-08-28 16:43:57

C#多线程学习

2009-08-24 17:06:37

C#字符串

2009-08-28 10:31:47

C#字符ASCII码

2009-08-27 13:30:11

C# interfac

2009-09-04 17:44:35

点赞
收藏

51CTO技术栈公众号