【发布时间】:2018-03-18 18:12:07
【问题描述】:
我的班级里有这样一个字段:
public class Shape
{
private Point2D m_location;
public void Move()
{
m_location = ...
}
public void Rotate()
{
m_location = ...
}
public void Flip()
{
m_location = ...
}
}
我在 NDepend 中收到一条警告:
不要从许多方法中分配一个字段
https://www.ndepend.com/default-rules/Q_Don't_assign_a_field_from_many_methods.html
看来我可以通过在我的类中创建另一个方法来轻松解决这个问题,例如:
private void SetLocation(Point2D point)
{
m_location = location;
}
并在所有设置m_location 的方法中调用它。现在m_location 仅以一种方法分配!
这是解决此问题的有效方法吗?我是否只是通过在这些方法中调用 SetLocation() 方法来隐藏之前检测到的代码异味 NDepend?
【问题讨论】:
-
您可以为该字段
public SomeObject SomeObject {get; private set;}创建一个属性,但是是的 - 拥有另一个私有 setter 方法也是有效的,因为它使您的变量完全私有。 -
有什么理由让它成为一个类级别的字段吗?
-
我不知道你的完整代码,所以我不能说是否有“代码气味”,但老实说,我不会仅仅因为工具而创建额外的方法给你一个警告,如果你必须从这些方法中分配字段,那就去做吧。
-
@CamiloTerevinto 是的,它是这个类的组成部分之一。
-
@R1PFake 我也永远不会这样做,我只是好奇这些东西是如何重构的。
标签: c# refactoring ndepend