当前位置: 首页 > 编程语言 > C# > 正文

C#3.0中的“多重继承”

时间:2010-12-19 在路上的牛

C#的对象系统是个单根系统,不支持类的多继承,只支持多接口实现,这在 某种程度带来了一些不便:我们在系统设计时经常会抽象出一些接口,并为接口 提供一个抽象类作为默认的实现,然后实际使用的类可以从抽象类派生。如果一 个类实现了多接口,那我们只能选择一个抽象类作为祖先类,再将其他接口的实 现手工加到类中。

这种情况在C#3.0中有了变化,我们现在可以利用C#3.0的扩展方法来实现一 个“受限的多继承”。

C#3.0中引入了扩展方法,可以利用一个静态类的静态方法为一个类或者接口 添加方法,关键是添加的方法是包含实现的,由此我们可以在C#3.0中为接口提 供一个带实现的方法声明,而无需额外的实现类!如果一个类实现了多个这样的 接口,就可以达到类似多继承的效果。

让我们用代码测试一下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test35
{
   public interface ITestA{ }
   public static class ITestAHelper
   {
     public static void TestA(this ITestA obj)
     {
       Console.WriteLine("ITestAHelper.TestA");
     }
   }
   public interface ITestB{ }
   public static class ITestBHelper
   {
     public static void TestB(this ITestB obj)
     {
       Console.WriteLine("ITestBHelper.TestB");
     }
   }
   public class Test : ITestA, ITestB
   {
   }
   class Program
   {
     static void Main(string[] args)
     {
       Test obj1 = new Test();
       obj1.TestA();
       obj1.TestB();
       Console.ReadKey();
     }
   }
}

执行的结果:

ITestAHelper.TestA
ITestBHelper.TestB