2012-06-18 34 views
0

我收到一條錯誤「非靜態字段,方法或屬性需要對象引用'Excel1.Program.GetAllTemplateNames(string,string)」我知道這是非常愚蠢,但我對C#來說很新,並且可以在調試此代碼時提供一些幫助。是否可以從Main函數調用靜態函數?我有這些懷疑。非靜態字段所需的對象引用

回答

2

改變這一行

 GetAllTemplateNames(strParam1, strRetVal); 

 new Program().GetAllTemplateNames(strParam1, strRetVal); 

或使該方法是靜態的。

+0

謝謝你對我的幫助:) – user1463269

3

你應該讓GetAllTemplateNames方法,如果您希望能夠從其他的靜態方法調用它static沒有一個類的實例:

public static void GetAllTemplateNames(String strParam, String strRetVal) 

這也意味着該領域,此方法使用(templateClienttaskClient也必須是靜態的)

或另一種可能性是創建包含類的一個實例:

new Program().GetAllTemplateNames(strParam1, strRetVal); 
+0

非常感謝:) – user1463269

2

問題發生在線GetAllTemplateNames(strParam1, strRetVal);,以及任何其他調用​​或ReturnAllTemplateNames()

這些方法不是靜態的,但你是從靜態方法調用它們!您需要將它們設置爲靜態,或者創建其包含類的實例,以便使用靜態方法(如main())調用它們。

+0

是的,我得到了它..感謝很多:) – user1463269

4

由於ProcessInput是靜態的,因此您無法從此處調用實例(非靜態)方法GetAllTemplateNames,而無此類的實例(Program)。

因此,您需要使GetAllTemplateNames也是靜態的,或者您需要使ProcessInput爲非靜態。我會選擇第二個選項,因爲GetAllTemplateNames需要訪問某些靜態時不可能的實例變量。

因此改變ProcessInput簽名按以下方式(注意被遺漏的static):

public void ProcessInput(String strRetVal, String strFunctionName, /*String strParamCount,*/ String strParam1, String strParam2, String strParam3, String strParam4) 

現在你也需要改變這個方法的調用在main到:

var p = new Program(); // create an instance 
p.ProcessInput(strRetVal, strFunctionName, /*strParamCount,*/ strParam1, strParam2, strParam3, strParam4); 

MSDN: static

1

主要功能是靜態的,這就是爲什麼你可以調用ProcessInput。但是,您不能從靜態函數調用非靜態函數:GetAllTemplateNames必須是靜態函數。

相關問題