小编jon*_*onp的帖子

不可改变的阶级结构设计

所以我们都意识到不可变类型的好处,特别是在多线程场景中.(或者至少我们都应该意识到这一点;参见例如System.String.)

但是,我没有看到很多关于创建不可变实例的讨论,特别是设计指南.

例如,假设我们想要具有以下不可变类:

class ParagraphStyle {
    public TextAlignment Alignment {get;}
    public float FirstLineHeadIndent {get;}
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我见过的最常见的方法是拥有可变/不可变的"对"类型,例如可变的List <T>和不可变的ReadOnlyCollection <T>类型或可变的StringBuilder和不可变的String类型.

为了模仿这个现有的模式,需要引入某种类型的"可变" ParagraphStyle类型,它"复制"成员(提供setter),然后提供一个ParagraphStyle构造函数,接受可变类型作为参数

// Option 1:
class ParagraphStyleCreator {
    public TextAlignment {get; set;}
    public float FirstLineIndent {get; set;}
    // ...
}

class ParagraphStyle {
    // ... as before...
    public ParagraphStyle (ParagraphStyleCreator value) {...}
}

// Usage:
var paragraphStyle = new ParagraphStyle (new ParagraphStyleCreator {
    TextAlignment = ...,
    FirstLineIndent …
Run Code Online (Sandbox Code Playgroud)

.net immutability

5
推荐指数
1
解决办法
709
查看次数

标签 统计

.net ×1

immutability ×1