2013-06-01 82 views
1

我的問題的功能可能是很基本的,但我沒有找到答案......C# - 從調用靜態主

我Program.cs中 寫了一個函數(公共checkSomething即獲得2串),當我試圖從靜態主 調用這個函數,我得到這個錯誤:

"An object reference is required for a non-static field, method or property 'checkSomething(string,string)' ".

然而,當我改變了我的主要公共(而不是靜態) - 沒有錯誤。 爲什麼會發生這種情況?有什麼更好 - 有一個靜態主或不?爲什麼它甚至重要?

謝謝!

+0

把你的函數作爲靜態,public static checkSomething(string x,string x2) –

+4

你對靜態的含義有多少了解? –

+2

@ Pierre-LucPineault:這不一定合適。我們根本無法分辨這麼少的信息。目前看起來很清楚的一點是,OP應該更多地瞭解「static」的含義 - 並且SO不如通過一本書或好的教程IMO那樣完成。 –

回答

2

這裏的問題不是靜態函數,而是爲什麼mainC#應用程序中是靜態的。

它與主應用程序只有一個線程有關。這是在主函數上使用[STAThread]屬性時定義的。正在執行的線程僅進入一次主函數,並且不需要類的實例。

靜態主函數然後可以實例化正常操作所需的任何類。這些往往是形式或工人類的東西。

程序要麼在主線程中輸入消息循環來處理可見的窗體,要麼程序終止。

當您從startup function移除主要的build options靜態參考該項目切換到startup object,並且main被調用之前創建類的實例。

這是一個個人喜好的問題,但請記住,在啓動過程中只有一個主要執行。

+0

+1不僅回答確切的問題,而且能夠下降到更多的初學者水平,並給出一個有幫助的答案,而不是對OP進行約束。 –

+1

非常感謝你! – nati

1

主要方法應該是靜態的,所以你不能從靜態方法調用非靜態方法。

將checkSomething改爲static。

如果main方法不是靜態的,那麼我們需要創建實例來調用main方法。爲了再次創建,我們需要執行一些代碼!這就是爲什麼我認爲這個起點Main使靜態。