浅谈C#如何实现多继承

开发 后端
C#如何实现多继承,关键在于接口可以写方法的实现。多继承即一个子类可以有多个父类,它继承了多个父类的特性。

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协变和逆变的新特性
责任编辑:彭凡 来源: cnblogs
相关推荐

2009-05-13 11:50:17

C#多继承接口

2009-09-04 17:34:11

C#CC++

2009-09-01 18:29:10

C#继承C#多态

2009-08-13 18:15:06

C#继承构造函数

2009-08-17 17:16:19

C#实现在线升级

2009-08-19 15:08:30

C#泛型

2009-09-07 05:24:22

C#窗体继承

2009-08-20 18:30:33

C# ReaderWr

2011-09-21 10:56:31

C#结构

2009-08-13 18:36:36

C#继承构造函数

2009-08-24 10:31:37

C#接口继承

2009-07-22 17:15:04

C#实现

2011-03-29 09:14:49

Dispose模式C#

2009-07-30 18:20:21

C#继承

2009-08-12 11:24:25

C# String对象

2009-08-07 11:26:53

C#数组结构

2009-08-31 09:37:09

C# Employee

2009-08-19 17:12:18

C# Connecti

2009-08-26 15:46:01

C#匿名类型

2009-08-20 10:24:52

C#开发WinForm
点赞
收藏

51CTO技术栈公众号