很常见的场景:我有一个类有多个实例变量和一个接受多个参数的构造函数。我能以某种方式将一个绑定(bind)到另一个吗?将所有参数分配给实例变量非常冗长,并且是约定优于配置原则可以(并且应该)涵盖的情况之一。我的示例代码如下所示:
public class myClass
{
private object param1;
private object param2;
private object param3;
private object param4;
public myClass(object param1, object param2, object param3, object param4)
{
this.param1 = param1;
this.param2 = param2;
this.param3 = param3;
this.param4 = param4;
}
}
是否有一种简单的方法来摆脱这种情况并让 C# 自动发挥其魔力?
最佳答案
C# 语言中没有任何内容涵盖这一点,不。虽然工具可以为您生成代码,但它们可能不一定会保持最新,您最终仍会看到代码。您可以可能在某些使用反射的场景中执行此操作,例如:
public MyClass(object param1, object param2, object param3, object param4)
{
Helpers.PopulateFromConstructor(this, param1, param2, param3, param4);
}
...您需要按照与参数相同的顺序指定值,并保持与字段相同的名称等。当字段为只读<时,您可能还会发现问题
.
就我个人而言,我只是接受它 - 如果您愿意,可以使用工具生成代码,否则就接受它。
请注意,您可能希望在设置字段时进行验证,尤其是在无效时。所以你的构造函数主体可能实际上像这样结束:
public myClass(object param1, object param2, object param3, object param4)
{
this.param1 = Preconditions.CheckNotNull(param1);
this.param2 = param2;
this.param3 = Preconditions.CheckNotNull(param3);
this.param4 = param4;
}
(当然,对于合适的 Preconditions
类。我在 Java 代码中无偿地借鉴了 Guava 的想法,因为我在日常编码中使用了它。这就是我们的方法也在 Noda Time 中使用。)
关于C# 将构造函数参数绑定(bind)到实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12159206/