小编ano*_*pse的帖子

是否有一种简单的方法来创建一个类的不可变版本?

有一种简单的方法可以使实例不可变吗?

让我们举个例子,我有一个包含大量数据字段的类(只有数据,没有行为):

class MyObject
{
    // lots of fields painful to initialize all at once
    // so we make fields mutable :

    public String Title { get; set; }
    public String Author { get; set; }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

创建示例:

MyObject CreationExample(String someParameters)
{
    var obj = new MyObject
    {
        Title = "foo"
        // lots of fields initialization
    };

    // even more fields initialization
    obj.Author = "bar";

    return obj;
}
Run Code Online (Sandbox Code Playgroud)

但是现在我已经完全创建了我的对象,我不希望该对象再次变得可变(因为数据使用者永远不需要改变状态),所以我想要像List.AsReadOnly这样的东西:

var immutableObj = obj.AsReadOnly();
Run Code Online (Sandbox Code Playgroud)

但是如果我想要这种行为,我需要创建另一个具有完全相同字段但没有setter的类.

那么有没有自动生成这个不可变类的方法呢?或者在创建过程中允许可变性的另一种方法,但是一旦初始化就不可变?

我知道字段可以标记为"只读",但是对象将在类之外初始化,并且将所有字段作为构造函数参数传递似乎是一个坏主意(参数太多).

.net c# class immutability

10
推荐指数
1
解决办法
2203
查看次数

标签 统计

.net ×1

c# ×1

class ×1

immutability ×1