C# 将构造函数参数绑定(bind)到实例变量

标签 c# constructor

很常见的场景:我有一个类有多个实例变量和一个接受多个参数的构造函数。我能以某种方式将一个绑定(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/

相关文章:

c# - 如何实现序列的约束改组

c# - 方法必须被覆盖但不是抽象的?

C#、Word 2003 加载项和工具栏按钮事件

kotlin - Kotlin数据类无法初始化父类的属性

c++ - 我应该如何指定指针成员的构造函数参数的常量性

c# - 如何确定 Exchange 邮件项目是否为自动回复邮件?

c# - 在 C# 中从另一个主体调用一个构造函数

java - 在java中的不同构造函数中使用1个变量

c++ - 为什么我的默认构造函数返回一个 boolean 值?

c# - 您能否编译 C#,使其在运行时不需要 .NET Framework?