1
thisrabbit 2023-11-19 10:19:35 +08:00 1
链式调用? Method Chaining
https://en.wikipedia.org/wiki/Method_chaining |
2
nulIptr 2023-11-19 14:21:38 +08:00
我很奇怪为啥 lz 要构造这么个概念。楼上贴的 wiki 里面也说了,链式调用只是语法糖。在 c#中所有的 method 都是在 class 中的,到 il 层都是 call/calli/callvirt ,有构造这些的概念功夫不如看看 il 里面的 call/calli/callvirt 有啥区别。
|
3
huzhikuizainali OP @thisrabbit 谢谢回复
我搜了一下链式调用。看到的例子是 对象.方法.方法 这种形式。但是上面代码是:方法.方法 的形式。所以我不确定是不是链式调用? 还有我在 https://learn.microsoft.com/zh-cn/docs/ 这里搜索链式调用,Method Chaining 。也搜不到什么有用信息。是不是搜索方法有问题? |
4
thisrabbit 2023-11-19 21:28:23 +08:00
@huzhikuizainali “方法.方法” 其实只是表象,本质是“[返回值为对象的方法]().[被上一个方法返回的对象所拥有的方法]()”,这样来看还是你说的“对象.方法.方法”,这种应该确实就是链式调用了,你可以先看看 OOP 语言 Java 里链式调用的用法,不是任何方法都可以链起来,前提必须是上一个方法的返回值是一个新的对象或用 this 返回当前对象。
其次的话虽然当前问题只局限在 C#里,但还是想建议 OP 在表述“方法.方法”时严谨一些,一定要带上 call 的括号(),因为在 Python ,JS 等动态语言里,你可以往一个函数内挂载别的 property ,比如有一个 function foo() {},那么可以 foo.bar=function() {},这样子 foo 既可以被 call 也可以被当作对象做属性索引 foo.bar ,这种时候 foo().bar()和 foo.bar()实际上是完全不同的两种调用了。 |
5
thisrabbit 2023-11-19 21:51:41 +08:00
@huzhikuizainali 重新看了一下你的问题,如果你是想问为什么 isValidLogFileName 可以直接引用同 class 下的 GetManager 而不用像其他语言一样 this.GetManager 的话,可能这是一个 C#的语法糖,见 https://stackoverflow.com/a/16227273
此外如果问题还是在链式调用的话,你也可以看一下 FluentAPI 相关的内容,这个概念基本上也是利用了链式调用来提供一种更简洁的调用方式。 |