2015-02-23 163 views
0

有沒有辦法總是調用靜態類的構造函數?搜索後,我看到它只打一次電話。總是調用靜態構造函數

我有一個有很多方法的類,我的方法就像20個方法,但是讓我們來想象這個類有500個方法。 這500個方法都有一個調用web服務的方法。 現在,調用web服務我都與證書安全檢查之前(因改變服務器):

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateRemoteCertificate); 
CredentialCache cache = new CredentialCache(); 

所以我必須寫在每次調用前該代碼。 所有的方法都是靜態的,還有類,所以我的選擇是:

  • 複製並粘貼到500種的所有方法的代碼(將創建封裝兩條線的方法)。
  • 轉換靜態類實例化進級,並把代碼中的構造,但我將不得不改變代碼來創建新類的對象,處置不能休息...

是有辦法總是調用靜態構造函數嗎?我已經看到了方面的一些東西,但不確定如何使用它們。

+0

靜態字典將被調用一次。你不能把它稱爲正常的構造函數。 – 2015-02-23 11:36:25

+0

你應該使用lamba表達式,在這個表達式中你將封裝這兩行,然後運行你以後要運行的任何東西。我的2美分。 – facundofarias 2015-02-23 11:37:05

+0

我會建議使用更好的設計架構。 。 。爲你的需求使用靜態構造函數是一個非常不明智的想法。 。 。 。 。 – 2015-02-23 11:37:44

回答

4

static構造函數只能運行一次。你不會改變這一點。

正如你所說的,最好的解決方案是創建你的類的一個實例,並將該代碼放在構造函數中再次運行。在我看來,雖然證書檢查需要完成一次,因爲證書不會在幾秒鐘內改變。

+0

)我可能會創建該類的實例。問題我認爲,外部代碼必須改變,你不能改變它,雖然這不是我的情況,幸運的是, – pepemadruga 2015-02-23 11:56:08

+0

證書在這裏和其他類中檢查。檢查有點不同,不同的服務器,這就是爲什麼我們需要每次再次調用這個代碼(如果它改變了) – pepemadruga 2015-02-23 11:58:05

+0

不是真的,如果沒有「簡單」的解決方案: – pepemadruga 2015-02-23 14:57:26

0

使用類而不是任一實例化或靜態類實例的Singleton實例。

您獲得了實例化類的力量,但可以像靜態類一樣使用它,這意味着您的重複代碼問題得到解決,您可以像靜態類一樣使用它,因爲您的單個實例可用作靜態屬性。

Implementing Singleton in C#

0

YIF您想進行安全檢查,我建議使用Singleton格局。您可以在私人構造函數上進行安全檢查,但請注意,這將會是可笑的錯誤

它只會對第一個呼叫進行安全檢查,然後駐留在內存中,並不一定會對其他呼叫執行安全檢查。

+0

靜態類可以有一個靜態構造函數 – aush 2015-02-23 11:40:05

+0

Static classs沒有實例,甚至沒有一個。 – juharr 2015-02-23 11:42:02

+0

@aush,你是對的。更正。 – user3021830 2015-02-23 11:42:36