C#只读计算属性,它们应该是方法吗?

Jim*_*ner 42 c# standards

我有几个实体,它们有计算字段,如TotalCost.现在我把它们作为属性,但我想知道它们是否应该是方法.这有C#标准吗?

public class WorkOrder
{
    public int LaborHours { get; set; }
    public decimal LaborRate { get; set; }

    // Should this be LaborCost()?
    public decimal LaborCost
    {
        get
        {
            return LaborHours * LaborRate;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Tho*_*que 54

只要计算没有花费明显的时间,就可以使用计算的属性而不是方法

请参阅财产使用指南

  • @shkiper,好吧,这可能是一个意见问题,但我认为 DTO 不应该调用服务。它应该是一个纯粹的“哑”对象,除了保存数据什么都不做。 (2认同)

Cel*_*ish 15

我认为方法应该对对象执行操作,通常会更改对象的状态.即使计算属性,属性也应反映对象的当前状态.所以你应该保持你的财产IMO.

  • 程序员假设属性访问是恒定时间,因此Microsoft建议不要在属性中进行任何复杂的计算,而是在涉及重要处理时使用方法. (9认同)

Tim*_*ely 7

我认为他们应该都是财产.只要它不改变对象的状态,我就把它作为一个属性来酷.

另外,如果我使用你的类进行数据绑定(WPF等),那么我可以直接绑定到你的属性而无需修改/扩展类.

  • 同意,但重要的是要记住,如果要绑定到计算属性,那么其他相关的属性setter或mutator方法需要为计算属性引发PropertyChanged事件. (2认同)