|
扩展方法的定义,需要注意三个部分:1、静态类(私有公共都可以);2、静态方法(私有公共都可以);3、第一个函数参数前带 this(必须是第一参数前)
namespace Hongjun.Guo { static class MyExtensionMethods { internal static void Print(this object s) { Console.WriteLine(s); } } }
扩展方法的使用,需要注意点: using 你定义所在的命名空间。
using Hongjun.Guo;
static void Main(string[] args) { object o = "dsdgs"; o.Print(); }
这样一个简简单单的代码后,我们就可以很方便的对一些不开源的第三方控件增加很多我们自己额外需要的功能。
扩展方法的使用,有时候并不是这么简简单单,我们来看一些特殊情况,通过这些特殊情况的分析,我们可以更深入的了解扩展方法:
情况一 : 扩展方法跟原来类的方法重名时候的处理逻辑。
场景:我们是对一个第三方的没有开放源代码组件的一个类扩展了一个方法,比如方法: Print 。过了一段时间后,这个第三方的组件发布了新版本,该类的增加了 Print 方法。这时候会出何种效果??
问题演示代码:
namespace Hongjun.Guo {
public class MyClass { public void Print() { Console.WriteLine("****"); } }
static class MyExtensionMethods &nb [1] [2] [3] 下一页
|