我刚刚意识到c#属性结构也可以与私有访问修饰符一起使用:

private string Password { get; set; }

虽然这在技术上很有趣,但我无法想象我什么时候会使用它,因为私人领域涉及的仪式甚至更少:

private string _password;

我无法想象什么时候我需要能够在内部获取但不设置或设置但不获取私有字段:

private string Password { get; }

or

private string Password { set; }

但也许有嵌套/继承类的用例,或者可能get/set可能包含逻辑,而不仅仅是返回属性的值,尽管我倾向于严格保持属性简单,让显式方法做任何逻辑,例如GetEncodedPassword()。

是否有人出于某种原因在c#中使用私有属性,或者它只是那些技术上可行但在实际代码中很少使用的结构之一?

齿顶高

不错的答案,我仔细阅读了这些私人财产的用途:

当需要惰性加载私有字段时 当私有字段需要额外的逻辑或者是计算值时 因为私有字段很难调试 为了“向自己展示一份合同” 将公开的属性作为序列化的一部分在内部转换/简化 包装要在类中使用的全局变量


当前回答

也许有嵌套/继承类的用例,或者get/set可能包含逻辑,而不仅仅是返回属性的值

即使当我不需要属性的getter或setter上的逻辑时,我也会使用这种方法。使用属性(即使是私有属性)确实有助于您的代码不受未来的影响,以便您可以在需要时将逻辑添加到getter。

如果我觉得某个属性最终可能需要额外的逻辑,我有时会把它包装成一个私有属性,而不是使用字段,这样以后就不必更改代码了。


在半相关的情况下(尽管与你的问题不同),我经常在公共属性上使用私有设置:

public string Password 
{
    get; 
    private set;
}

这为您提供了一个公共getter,但保持setter私有。

其他回答

也许有嵌套/继承类的用例,或者get/set可能包含逻辑,而不仅仅是返回属性的值

即使当我不需要属性的getter或setter上的逻辑时,我也会使用这种方法。使用属性(即使是私有属性)确实有助于您的代码不受未来的影响,以便您可以在需要时将逻辑添加到getter。

如果我觉得某个属性最终可能需要额外的逻辑,我有时会把它包装成一个私有属性,而不是使用字段,这样以后就不必更改代码了。


在半相关的情况下(尽管与你的问题不同),我经常在公共属性上使用私有设置:

public string Password 
{
    get; 
    private set;
}

这为您提供了一个公共getter,但保持setter私有。

当存在与属性set或get相关的逻辑时(考虑惰性初始化),并且属性在类中的几个地方使用时,这是非常有意义的。

如果它只是一个直接的后场?我想不出什么好理由。

我使用私有属性来减少访问经常使用的子属性的代码。

    private double MonitorResolution
    {
        get { return this.Computer.Accesories.Monitor.Settings.Resolution; }
    }

如果有很多子属性,它是有用的。

私有get only属性的一个很好的用法是计算值。有几次我有私有只读属性,只是在我的类型中对其他字段进行计算。它不值得作为方法,其他类也不感兴趣,所以它是私有属性。

这是我唯一能想到的用法

private bool IsPasswordSet 
{ 
     get
     {
       return !String.IsNullOrEmpty(_password);
     }
}