加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

让“链式调用(方法链)”更加自然一点

发布时间:2020-12-16 09:10:32 所属栏目:asp.Net 来源:网络整理
导读:不论是JavaScript还是C#程序,我们已经习惯了采用如下所示的“链式调用”的方式进行编程,这样确实会使我们的程序变得很精练。 1: new Foo() 2: .UseXxx() 3: .UseZzz() 4: .UseZzz() 5: .Invoke(); 采用这种链式调用方式的很多方法都是扩展方法,比如上面所

不论是JavaScript还是C#程序,我们已经习惯了采用如下所示的“链式调用”的方式进行编程,这样确实会使我们的程序变得很精练。

   1: new Foo()
   2:     .UseXxx()
   3:     .UseZzz()
   4:     .UseZzz()
   5:     .Invoke();

采用这种链式调用方式的很多方法都是扩展方法,比如上面所示的UseXxx、UseYyy和UseXxx方法就是采用如下形式定义的扩展方法。

2: {
   4: }
   6: class Foo : IFoo
   7: {
   8:     void Invoke()
   9:     {}
  10:     void Execute()
  11:     {}
  12: }
  13:? 
  14: static class FooExtensions
  15: {
  16:     static IFoo UseXxx(this IFoo foo)
  17:     {
  18:         return foo;
  19:     }
  20:     static IFoo UseYyy(  21:     {
  22:           23:     }
  24:     static IFoo UseZzz(  25:     {
  26:           27:     }
  28: }

到目前为止,一切都显得很完美,而且我看到绝大部分的扩展方法也是采用这种方式定义的。但是如果我们希望采用如下的方式调用Foo的Execute方法的,很明显下面这样的代码是不能通过编译的。

1: IFoo foo = 3: .UseYyy()
   6: ((Foo)foo).Execute();

如果希望上面这段代码合法有效,我们的三个扩展方法应该定一个成如下的形式。