![]() |
1
9
这有用吗?
假设
调用返回的方法
其用法与set()类似,如下所述:
|
![]() |
2
5
我会这样想: 实际上,您希望链中的最后一个方法返回一个bucket。在您的例子中,我认为您希望该方法是mix(),因为您可以在之后搅拌桶
所以在调用mix()之前,需要至少设置一种颜色。让我们用一些语法接口来强制它。
把这些应用到BucketBuilder上
现在需要一个初始静态属性来启动链
基本上就是这样,你现在有了一个流畅的界面和可选的rgb参数(只要你至少输入一个)作为奖励。
fluent接口的特点是它们不太容易组合在一起,但是开发人员很容易对它们进行编码,而且它们是非常可扩展的。如果您想添加一个matt/gloss标志而不更改所有的调用代码,这很容易做到。 此外,如果api的提供者更改了下面的所有内容,则只需重写这段代码;所有callin代码都可以保持不变。 |
![]() |
3
0
我会使用init扩展方法,因为你总是可以使用委托。 你总是可以声明扩展方法来使用表达式,甚至可以使用表达式(存储它们以备以后使用,修改等等)。 这样您就可以轻松地存储默认的grup,比如:
这样,您就可以使用所有操作(或func)和缓存标准初始值设定项作为稍后的表达式链? |
![]() |
4
0
如果您真的想在不编写大量代码的情况下链接属性设置,一种方法是使用代码生成(codedom)。您可以使用反射获取可变属性的列表,生成一个带有final
我将跳过所有关于如何注册自定义工具的样板文件——这是很容易找到的文档,但仍然冗长,我不认为我会通过包含它来增加太多。不过,我会告诉你我在想什么。
我认为这应该差不多就可以做到了——它显然还没有经过测试,但是从这里开始,您可以创建一个codegen(继承自
这很难,但不像听起来那么难,完成后,您将能够编写如下代码:
我相信这正是你想要的。调用代码生成所要做的就是用一个自定义扩展注册该工具(比方说
等等。保存时,它将自动生成所需的代码文件,该文件支持编写上述语句。 我以前在一个高度复杂的消息传递系统中使用过这种方法,它有几百种不同的消息类型。一直构造消息、设置一组属性、通过通道发送消息、从通道接收消息、序列化响应等操作花费的时间太长…使用codegen大大简化了工作,因为它使我能够生成一个消息传递类,该类将所有单独的属性作为参数,并返回正确类型的响应。这不是我推荐给每个人的,但是当你处理非常大的项目时,有时你需要开始发明你自己的语法! |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |