是否只设置属性不好的做法?

kel*_*oti 8 c# anti-patterns

我有一些C#代码,喜欢创建具有setter但没有getter的属性.对我而言,这似乎是一种反模式,但我错过了什么?

public List<SiteVisitSummary> DataSource {
    set {
        // crazy logic here 
    }
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*Tao 17

我不知道我是否称它为反模式.我认为重要的是要实现的是,示例中的属性本质上是一种伪装成属性的方法.出于这个原因,这是不直观的,我通常会避免它.对我来说,这看起来更自然:

public void SetDataSource(IEnumerable<SiteVisitSummary> dataSource)
{
    // crazy logic here
}
Run Code Online (Sandbox Code Playgroud)

我见过的一个相当合理的情况是只设置属性是当有几个属性组合在一起时,将all设置为单个值是合理的事情(但显然, all作为一个值没有意义) .例如:

class Polyhedron
{
    public int Height { get; set; }
    public int Width { get; set; }
    public int Depth { get; set; }

    public int AllDimensions
    {
        set { Height = Width = Depth = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为它作为一种财产而不是一种方法更有意义; 您可以通过这种方式在对象初始化列表中使用它. (13认同)
  • 什么是新的多面体的行为{宽度= 10,AllDimensions = 5}?此外,我希望高度和深度初始化它自己的默认值,实际上不是.我不喜欢代码没有像人们期望的那样行事. (7认同)
  • 因此,如果它不直观且通常无用,那么这不会使它成为反模式吗? (4认同)
  • 示例为+1,但我不同意这应该是属性.即使在这种情况下,它也没有任何意义. (4认同)

Aar*_*ver 6

它可能对依赖注入很有用,而不是使用构造函数进行注入,而是使用属性.