让“链式调用(方法链)”更加自然一点
发布时间: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(); 如果希望上面这段代码合法有效,我们的三个扩展方法应该定一个成如下的形式。 4: {
7: static T UseYyy<T>(where T : IFoo 9: 10: }
13: 14: }
相关内容
推荐文章
站长推荐
热点阅读
|