簡體   English   中英

Resharper建議將我的私有方法靜態作為一個好建議嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM