1
25
不能对不可变对象使用对象初始值设定项。它们需要可设置的属性。
一个不变的对象意味着“在创建之后不会改变”。制作
如果对象对于可理解的构造函数来说过于复杂,您也可以使用构建器模式。通常,生成器本身将具有可变属性(可以在对象初始值设定项中使用),其.build()方法将创建实际实例。 编辑(OP): 我将添加我自己在这里编写的构建器示例,然后接受这个答案,因为它提出了一个合理的解决方案。
然后,可以使用以下方法构造它的实例:
编辑 :这是我对模式的看法:
下面是使用实现的示例
它具有到目标类型的隐式转换,允许您执行以下操作:
或者:
|
2
8
您需要在构造函数中设置属性,并且不需要为ID设置单独的局部变量:
创造:
|
3
4
将setter设置为公共的或创建构造函数重载以设置属性 名字 .
呼叫
等于
要使其真正不可变,请为属性创建一个字段 名字 并使其只读。所以财产 名字 只能使用构造函数设置,并且不能在运行时更改。
|
4
3
不能使用对象初始值设定项并具有不可变的对象,因为对象初始值设定项要求属性设置项是公共的。公共设置器意味着它不会是不变的。 唯一的解决方法是模拟不可变性,在调用一次异常之后在属性设置器中抛出异常。 我个人认为这不是一个好的设计,我会质疑为什么你如此热衷于使用对象初始值设定项,而不是构造函数。语法几乎相同。 |
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |