mez*_*oid 9 c# resharper static function
我最近注意到,当我创建私有方法,在传递给它们的对象中设置几个字段时,Resharper会提示一个提示,说明该方法可以是静态的.
这是我可能拥有的一种方法的大大简化的例子.
private void MakeStatusTheSame(MyClass mc, MySecondClass msc)
{
mc.Status = msc.Status;
}
Run Code Online (Sandbox Code Playgroud)
当我有这样的方法时,Resharper建议该方法可以是静态的.
我试图避免使公共方法静态,因为它们破坏了单元测试...但我不确定这同样适用于私有方法.
Resharper的建议是否是有效的最佳做法,还是应该将其关闭?
sco*_*ttm 11
我认为这绝对是静态方法的主要候选者.它没有改变任何类的属性,字段等.
这是一个例子:
class MyClass
{
public static void MakeStatusTheSame(MyClass mc, MySecondClass msc)
{
mc.status = msc.status;
}
private void MakeStatusTheSame(MySecondClass msc)
{
this.status = msc.status;
}
private int status;
}
Run Code Online (Sandbox Code Playgroud)
此外,您可以使它成为一个扩展方法(也是静态的):
public static class Extensions
{
public static MyClass MakeStatusTheSame(this MyClass mc, MySecondClass msc)
{
mc.status = msc.status
return mc; /* make the method chainable */
}
}
Run Code Online (Sandbox Code Playgroud)
冒着听起来像逆向的风险,我必须承认我不喜欢将静态方法与实例方法混合; 而且我一般不喜欢静态方法.静态方法难以测试,难以覆盖且难以维护.我更喜欢将处理Foo对象的所有静态方法都粘贴到单个FooUtils类中 - 或者更好的是,将其粘贴到FooSomethingDoer类的单例实例中.
当然,静态方法在某些情况下非常有意义 - 例如,在创建上述单身人士或工厂等时,我并不是说所有静态方法都是纯粹的邪恶; 我只是喜欢在可能的情况下避免它们.
我认同; 看到方法是静态的,这清楚地表明该方法不应该与任何实例成员交互.
想象一下调试非静态方法并意识到实例没有被触及.即时气味,如果没有解释功能的说明,你可能会分心于真正的问题.