我有几个实体,它们有计算字段,如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;
}
}
}
答案 0 :(得分:54)
只要计算时间不明显,就可以使用计算出的属性而不是方法
答案 1 :(得分:15)
我认为方法应该对对象执行操作,通常会更改对象的状态。即使计算属性,属性也应反映对象的当前状态。所以你应该保留你的房产IMO。
答案 2 :(得分:7)
我认为他们都应该是属性。只要它不改变对象的状态,我就把它作为一个属性来冷静。
此外,如果我使用您的类进行数据绑定(WPF等),那么我可以直接绑定到您的属性,而无需修改/扩展该类。
答案 3 :(得分:3)
如果它们是a)轻量级且b)没有副作用,我会将它们作为属性。
轻量级当然有点模糊,但经验法则是:如果我不得不担心调用一个属性(无论是在循环中还是在其他任何地方),它应该是一种方法。
答案 4 :(得分:1)
我会将它们留作属性。但是,没有“标准”的理由以这种或那种方式做事。如果你是独自一人,做你最喜欢的事。如果您是团队成员,那么请遵循团队其他成员所遵循的惯例。
答案 5 :(得分:0)
在我看来,这是一种偏好;这就是你想要做的。在大多数情况下,我做的都是做法,除非涉及到逻辑。另外,如果您需要传入参数来更改功能,那么显然会应用一种方法...
答案 6 :(得分:0)
取决于,如果你的“属性”变成猛犸象并且需要一大堆业务逻辑它们不应该是属性,那么应该有一种方法。 您发布的示例看起来可以成为一个属性。没有标准的做法,坚持你的直觉;如果它看起来需要做很多事情,你可能需要一种方法。
答案 7 :(得分:0)
如果某个属性的计算成本特别高,我可能会将其更改为GetWhatever()方法。这可以作为任何使用我的类的人的暗示,这个值需要一些重要的工作才能到达,并且调用者应该缓存值而不是多次调用该方法。
琐碎的计算在属性中非常合适。
答案 8 :(得分:0)
无论如何,它主要只是语法糖,所以,只要它只是返回有关对象的信息而不是更改对象或与其他对象交互,那么您希望自己是团队中的惯例,或者您喜欢什么。
答案 9 :(得分:0)
MSDN提供有关此here
的信息你认为它是哪一个?动作计算/ getLaborCost还是数据?类库设计者经常必须这样做 决定实施一个班级 会员作为财产或方法。在 一般来说,方法代表行动和 属性代表数据。
WorkOrder workOrder = new WorkOrder();
workOrder.LaborHours = 8;
workOrder.LaborRate = 20;
decimal cost = workOrder.LaborCost; // This is OK here
但是如果你打算对同一个对象也这样做:
worOrder.LaborHours = 18;
decimal newCost = workOrder.LaborCost
现在这不是一个属性。成为一种方法会好得多。
答案 10 :(得分:0)
有时,您还必须考虑您正在建模的内容......在某些域中,计算出的值通常或预期是模型的属性 - 属性。如果是这种情况,那么将其写为属性,即使计算计算起来并不是微不足道或有点贵。只需在API上记录它或实现一些缓存机制,以最大限度地减少对此属性的重新计算。