举例说明.Net Framework接口各种实现方法
创始人
2024-06-19 15:51:50
0

.Net Framework可以我们提供一个部署WEB应用程序的平台。它的出现就是为了帮助开发人员提供良好的编程环境,以助开发人员提高自己的程序开发效率。我们见天将会了解到的是.Net Framework接口的相关操作方法。#t#

接口继承:类型继承的是接口中的方法签名,而非方法实现。

当一个类型继承了一个接口时,它只是在允诺提供其中的方法实现:如果没有提供,则该类型将被认为是抽象的,从而不可能被实例化。

.Net Framework接口仅仅是一个包含着一组虚方法的抽象类型,其中每一个方法都有他们的名称、参数和返回值类型。但接口方法不包括任何实现。

接口也可以定义事件、无参属性以及含参属性,因为它们都只不过是映射到方法上的语法缩写而已。

如果在一个类型内实现接口方法的时候忽略了virtual关键字,那么该方法将被认为是一个密封的虚方法,继承了该实现类型的其他类型将不可以再重写该方法。

当一个类型“继承”某个接口时,它不仅要实现该接口定义的所有方法,还要实现该接口从其他接口中“继承”而来的所有方法。

实现了多个接口的类型允许我们将它的对象看作这些接口中的任何一个。

.Net Framework接口举例:

1.使用接口改变已装箱值类型中的字段

  1. struct Point  
  2. {  
  3. public int x,y;  
  4. public void Change(int x,int y)   
  5. {  
  6. this.x=x; this.y=y;  
  7. }  
  8. public override String ToString()   
  9. {  
  10. return String.Format("({0},{1})",x,y);  
  11. }  
  12. }  
  13. class Program  
  14. {  
  15. static void Main(string[] args)  
  16. {  
  17. Point p=new Point();  
  18. pp.x=p.y=1;  
  19. p.Change(2,2);  
  20. Console.Write(p); //实现System.
    Iformattable接口,调用ToString方法  
  21. Object o=p; //o指向装箱后的Point对象,显示(2,2)  
  22. Console.Write(o);  
  23. ((Point) o).Change(3,3);   
  24. Console.Write(o); //拆箱,将已装箱Point
    中的字段拷贝到线程堆栈上的一个临时 Point中,
    这个临时Point上的字段值改为3,但已装箱的Point
    对象不受这种改变的影响,显示(2,2)   
  25. }  

问题出现了,C#不允许我们改变已装箱值类型中的字段,下面利用.Net Framework接口做一个修订:

  1. interface IChangeBoxedPoint  
  2. {  
  3. void Change(Int32 x, Int32 y);  
  4. }  
  5. struct Point : IChangeBoxedPoint  
  6. {  
  7. public Int32 x, y;  
  8. public void Change(Int32 x, Int32 y)  
  9. {  
  10. this.x = x; this.y = y;  
  11. }  
  12. /**//*.*/  
  13. }  
  14. class App  
  15. {  
  16. static void Main()  
  17. {  
  18. Point p=new Point();  
  19. object o=new object();  
  20. /**//*.*/  
  21. ((IChangeBoxedPoint)p).Change(4, 4); 
  22. //p装箱,改变已装箱对象,但当Change返回后,
    已装箱对象立即被垃圾回收  
  23. Console.WriteLine(p); //(2,2)  
  24. ((IChangeBoxedPoint)o).Change(5, 5); 
  25. //这里没有装箱的必要,于是改变已装箱对象Point的值  
  26. Console.WriteLine(o); //(5,5) 
    C#中没有接口方法做不到这一点  
  27. }  

2.显示.Net Framework接口成员的实现

  1. public interface IComparable  
  2. {  
  3. Int32 CompareTo(object other);  
  4. }  
  5. struct SomeValueType:IComparable  
  6. {  
  7. private Int32 x;  
  8. public SomeValueType(Int32 x) { this.x = x; }  
  9. public Int32 CompareTo(SomeValueType other)  
  10. {  
  11. return (x - other.x);  
  12. }  
  13. Int32 IComparable.CompareTo(object other)  
  14. {  
  15. return CompareTo((SomeValueType)other);  
  16. }  
  17. }  
  18. public static void Main()  
  19. {  
  20. SomeValueType v1 = new SomeValueType(1);  
  21. SomeValueType v2 = new SomeValueType(2);  
  22. Int32 n;  
  23. n= v1.CompareTo(v2); //不进行任何装箱  
  24. n = ((IComparable)v1).CompareTo(v2); 
  25. //v2强制装箱  

注意三点:

a.CompareTo方法的名字前加了接口限定名IComparable.CompareTo,它告诉CLR只有在使用一个IComparable对象引用时方法才被调用

b.IComparable.CompareTo的实现是将other转型为SomeValueType后,通过调用CompareTo方法来完成的

c.IComparable.CompareTo方法前没有public或protected访问修饰符

显示.Net Framework接口方法的好处:类型安全,减少装箱操作。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...