[英]Is Resharper's recommendation to make my private method static a good recommendation?
我最近注意到,當我創建私有方法,在傳遞給它們的對象中設置幾個字段時,Resharper會提示一個提示,說明該方法可以是靜態的。
這是我可能擁有的一種方法的大大簡化的例子。
private void MakeStatusTheSame(MyClass mc, MySecondClass msc)
{
mc.Status = msc.Status;
}
當我有這樣的方法時,Resharper建議該方法可以是靜態的。
我試圖避免使公共方法靜態,因為它們破壞了單元測試...但我不確定這同樣適用於私有方法。
Resharper的建議是否是有效的最佳做法,還是應該將其關閉?
我認為這絕對是靜態方法的主要候選者。 它沒有改變任何類的屬性,字段等。
這是一個例子:
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;
}
此外,您可以使它成為一個擴展方法(也是靜態的):
public static class Extensions
{
public static MyClass MakeStatusTheSame(this MyClass mc, MySecondClass msc)
{
mc.status = msc.status
return mc; /* make the method chainable */
}
}
冒着聽起來像逆向的風險,我必須承認我不喜歡將靜態方法與實例方法混合; 而且我一般不喜歡靜態方法。 靜態方法難以測試,難以覆蓋且難以維護。 我更喜歡將處理Foo對象的所有靜態方法都粘貼到單個FooUtils類中 - 或者更好的是,將其粘貼到FooSomethingDoer類的單例實例中。
當然,靜態方法在某些情況下非常有意義 - 例如,在創建上述單身人士或工廠等時,我並不是說所有靜態方法都是純粹的邪惡; 我只是喜歡在可能的情況下避免它們。
我認同; 看到方法是靜態的,這清楚地表明該方法不應該與任何實例成員交互。
想象一下調試非靜態方法並意識到實例沒有被觸及。 即時氣味,如果沒有解釋該功能的評論,你可能會分心於真正的問題。
我通常會按照R#的建議去做。 這是一個私有方法,所以(希望)你不是在編寫單元測試。 使其靜態顯式表明它不使用任何實例成員,這使得檢查副作用更容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.