C# 自动属性中专用设置器的替代方案

C# 自动属性中专用设置器的替代方案,c#,.net,oop,C#,.net,Oop,如果您不应该为自动属性使用私有setter(糟糕的做法),那么我如何从类内部对其进行私有设置,并且只需向公众公开它?(假设我想将它设置为构造函数级别,但仍然允许它通过get公开) 示例类: public class Car { //set the property via constructor public SomeClass(LicensePlate license) { License = license } public Lic

如果您不应该为自动属性使用私有setter(糟糕的做法),那么我如何从类内部对其进行私有设置,并且只需向公众公开它?(假设我想将它设置为构造函数级别,但仍然允许它通过get公开)

示例类:

public class Car
{
    //set the property via constructor
    public SomeClass(LicensePlate license)
    {
         License = license
    }

    public LicensePlate License{get; private set;} // bad practice
}

您可以将该属性转换为一个具有支持字段且没有setter的属性

public class Car
{
    LicensePlate _license;

    public Car(LicensePlate license)
    {
        _license = license;
    }

    public LicensePlate License
    {
        get { return _license; }
    }
}

您可以将该属性转换为一个具有支持字段且没有setter的属性

public class Car
{
    LicensePlate _license;

    public Car(LicensePlate license)
    {
        _license = license;
    }

    public LicensePlate License
    {
        get { return _license; }
    }
}

你能举出你在哪里听说过私有setter不利于自动属性吗?我第一次听说。我知道private或其他不可访问/缺少
get
是不好的做法,但我不知道为什么
private set
会不好。你能举出你在哪里听说过private setter不适合自动属性吗?我第一次听到这个。我知道私有或其他不可访问/缺少
get
是不好的做法,但我不知道为什么
private set
会不好。不过我不想使用旧式:)。为什么一开始就私下安排二传甚至是不好的练习呢?@CoffeeAddict不是。你能告诉我你为什么这么想吗?让我更喜欢没有setter和backing字段的属性的唯一原因是,VS中的Intellisense对于前者的图标与对于后者的图标不同——因此,通过查看图标,您可能不知道自动属性是否具有公共setter/getter。不过,我不想使用旧样式:)。为什么一开始就私下安排二传甚至是不好的练习呢?@CoffeeAddict不是。你能告诉我你为什么这么想吗?让我更喜欢没有setter和backing字段的属性的唯一原因是,VS中的Intellisense对于前者的图标与对于后者的图标不同——因此,通过简单地查看图标,您可能不知道自动属性是否具有公共setter/getter。