浅谈C 浅谈css
创始人
2024-04-02 19:01:52
0

C # 如何实现多继承,关键在于接口可以写方法的实现

  1. namespace Extensions  
  2. {  
  3.   using System;  
  4.   using ExtensionMethodsDemo1;  
  5.  
  6.  
  7.      public static class Extension  
  8.      {  
  9. //扩展接口  
  10.         public static void MethodB(this IMyInterface myInterface)   
  11.         {  
  12.             Console.WriteLine("Extension.MethodB(this IMyInterface myInterface)");  
  13.         }  
  14.     }  
  15. }  
  16. namespace ExtensionMethodsDemo1  
  17. {  
  18.     using System;  
  19.     using Extensions;  
  20.  
  21.     public interface IMyInterface  
  22.     {  
  23.         void MethodB();  
  24.     }  
  25.  
  26.     class A : IMyInterface   
  27.     {  
  28.         public void MethodB(){Console.WriteLine("A.MethodB()");}  
  29.     }   
  30.  
  31.     class B : IMyInterface  
  32.     {  
  33.         public void MethodB() { Console.WriteLine("B.MethodB()"); }  
  34.  
  35.     }  
  36.  
  37.     class C : IMyInterface  
  38.     {  
  39.         public void MethodB() { Console.WriteLine("C.MethodB()"); }  
  40.  
  41.     }  
  42.  
  43.     class ExtMethodDemo  
  44.     {  
  45.         static void Main(string[] args)  
  46.         {  
  47.             A a = new A();  
  48.             B b = new B();  
  49.             C c = new C();  
  50.  
  51.             a.MethodB()  
  52.             b.MethodB()  
  53.             c.MethodB()  
  54.  
  55.  
  56.  
  57.         }  
  58.      }  

故事篇:

找到这个办法的故事,,,,一日,闲来无事,来玩玩sp1新特性,entity framework.

生成实体类啦.

不过,这些实体类属于充血模型.

习惯了petshop式的贫血模型的我,一下子想到,,,老子提取接口嘛,

然后,贫血模型诞生了.

作为两个模型的妈, IModelMother...是不是应该为儿子们做一些贡献呢.

想到了,两个实体类相互复制属性的方法 .... 

  1. Code  
  2.        public void CopyFrom(IModelMother model)  
  3.  
  4.        {  
  5.            this.P1 = model.P1;  
  6.            this.P2 = model.P2;  
  7.            this.P3 = model.P3;  
  8.            this.P4 = model.P4;  
  9.  
  10.  
  11.        } 

后来发现,,,这个方法,在两个实体类中都是相同的实现.

可惜他们妈妈是接口......哎.....

于是给scottgu发了封邮件,大致上说:

老古呀,,  .net怎么不能多重继承呢,这样,一个具有相同实现的方法,放哪呀?????

老古回信到,,,,oh,亲爱的,我们真是英雄所见略同,

 区别是,我TMD可以驱使一群高人为我解决这个问题.

为了解决这个问题,引入了扩展方法,这样你就可以通过继承接口来实现多继承啦.于是乎,产生了本文最上面的代码段

补充:为什么他们妈妈不是类???因为EF的实体类有个爹(System.Data.Objects.DataClasses.EntityObject)

【编辑推荐】

  1. C#中实现多继承的方式:混合+接口
  2. 多继承详解
  3. 浅谈C#基元类型及常见问题解答
  4. 利用C#指针进行图像操作
  5. C# 2010协变和逆变的新特性

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...