C# 3.0 扩展方法&接口
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
namespace ExtensionInterfaceMethod { class Program { static void Main(string[] args) { //使用接口变量来调用扩展方法 IBasicInterface bii = new BasicImplement(); bii.SubStract(9, 3); } } //先创建一个简单的接口 public interface IBasicInterface { int Add(int x, int y); } //创建一个实现该接口的类 public class BasicImplement : IBasicInterface { #region IBasicInterface 成员 public int Add(int x, int y) { return x + y; } #endregion } }
如果想要为该接口IBasicInterface增加一个相减的Subtract方法,在扩展方法中新定义一个Subtract方法。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
namespace ExtensionInterfaceMethod { public static class ExtensionMethodClass { public static int SubStract(this IBasicInterface basicinterface, int x,int y); } }
因为是接口扩展方法,所以不打算为这个扩展方法提供任何代码实现。
编译时运行报错,解决方法,在接口扩展方法中实现代码。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
namespace ExtensionInterfaceMethod { public static class ExtensionMethodClass { public static int SubStract(this IBasicInterface basicinterface, int x, int y) { //尽管是扩展一个接口,但是还是必须添加对方法的实现 return x - y; } } }
接口扩展方法的调用:
- 使用实现了该接口的类来直接调用扩展方法
BasicImplement bim = new BasicImplement(); bim.SubStract(9, 5);
- 使用接口引用来调用
IBasicInterface bii = new BasicImplement(); bii.SubStract(9, 3);
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
namespace Extensions { using System; using ExtensionMethodsDemo1; public static class Extension { //扩展接口 public static void MethodB(this IMyInterface myInterface); { Console.WriteLine("Extension.MethodB(this IMyInterface myInterface)"); } } } namespace ExtensionMethodsDemo1 { using System; using Extensions; public interface IMyInterface { //void MethodB(); } class A : IMyInterface { //public void MethodB() { Console.WriteLine("A.MethodB()"); } } class B : IMyInterface { //public void MethodB() { Console.WriteLine("B.MethodB()"); } } class C : IMyInterface { //public void MethodB() { Console.WriteLine("C.MethodB()"); } } class ExtMethodDemo { static void Main(string[] args) { IMyInterface a = new A(); IMyInterface b = new B(); IMyInterface c = new C(); a.MethodB(); b.MethodB(); c.MethodB(); Console.ReadLine(); } } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public interface I飞 { } public static class 飞接口的扩展 { public static void 飞<T>(this T 飞实例) where T : I飞 { Console.WriteLine("准备"); Console.WriteLine("张开双翅"); Console.WriteLine("起飞"); Console.WriteLine("我飞,我飞,我飞飞飞"); } } public class 老虎 { public virtual void 自我介绍() { Console.WriteLine("大家好,我是老虎。"); } } public class 苍蝇 : I飞 { public void 飞一个看看() { this.飞(); } } public class 超级老虎 : 老虎, I飞 { public override void 自我介绍() { Console.WriteLine("大家好,我是超级老虎哦!"); } public void 我会飞哟() { this.飞(); } }