簡體   English   中英

采用靜態方法的充分理由?

[英]Good reasons for static methods?

我對真正需要靜態的東西使用靜態方法。 我使用ReSharper以獲得更好的代碼質量。 有時ReSharper建議將方法設為靜態。

當我上以下課程時:

public class WhatEverClass {
    private string DoSomethingFancy(string input) 
    {
       string fancyStuff;
       // Fancy Stuff here
       return fancyStuff;
    }

    public WhatEverClass() {
       string awesome=DoSomethingFancy("some fancy string");
    }
}

ReSharper可能會說“可以將DoSomethingFancy設置為靜態”。

我知道可以將其設置為靜態,但是有充分的理由真正做到這一點嗎? 還是我應該忽略這些建議?

通過定義靜態方法(即計算內容的過程),您可以API使用者表明有關函數無狀態性 的意圖

當我們使用static函數時,我們不希望它在內部static private變量的某個位置保存計算狀態或某些內部值,因此即使在第一次調用時傳遞相同的參數,對該函數的下一次調用也可能會產生不同的結果。 。

簡而言之:每當您看到一個僅對參數執行某項操作但不保留某些狀態的函數時,將其設置為static

如果您的方法不需要聲明或更改實例化對象的狀態,則它應該是靜態的。

通常的想法是,如果您不創建任何實例,則可以將其聲明為靜態。 關於應在何處使用,ReSharper根據標准編程實踐為您提供建議。 但是,我采取了“標准編程實踐”。 這是一些個人編程偏好的問題。 這是有關該主題的詳細參考:

http://msdn.microsoft.com/en-us/library/79b3xss3.aspx

因為您將通過創建WhatEverClass實例從類外部調用WhatEverClass()方法。 因此,每個實例的值都將有所不同,因為變量是局部變量,並且每次創建類的實例時都會創建該變量。

但是,如果要對所有實例保持相同的值,則可以將其設置為static這樣它將在內存中創建一次,並且所有實例都將使用它。

當心將方法靜態化的后果!

通過將您的方法設為靜態,您將很難讓消費者放棄該算法的實現並將其替換為自己的算法(顯然,如果該方法是private ,則無需擔心)。

靜態方法的使用者將您的實現移植到了他們的代碼中-他們不能使用依賴注入來解析算法的特定實例(無需做一些工作)。 這使得他們的系統更難測試,並且通常使其自身的擴展性更差。

如果方法DoSomethingFancy在對象WhatEverClass中不使用任何東西,則在我的書中應將其設置為靜態,因為它實際上與使用該對象的對象無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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