在.net中创建不可变类型时,是否有公共字段?

Sim*_*mon 4 .net c# immutability

因此,在设计不可变类时,它应该使用get属性

public sealed class Person
{
    readonly string name;
    readonly int age;

    public Person(string name, int age)
    {
        this.name = name;
        this.age = age;
    }

    public string Name
    {
        get { return name; }
    }

    public int Age
    {
        get { return age; }
    }
}
Run Code Online (Sandbox Code Playgroud)

或者公开只读字段是否有效

public sealed class Person
{
    public readonly string Name;
    public readonly int Age;

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}
Run Code Online (Sandbox Code Playgroud)

O. *_*per 10

虽然这两个选项都会为您提供无法从外部更改其字段的对象,但相同的准则适用于不可变对象,否则:

使用属性而不是公开暴露字段仍然是一个优势; 您没有检查任何输入值,但是,您的类型的未来版本可能会计算某些值,而不是直接从内部字段读取它们.通过使用属性,您可以隐藏该实现细节,从而提高您未来更改的灵活性.