[英]Object reference required for a non-static field
我收到一個錯誤“非靜態字段,方法或屬性'Excel1.Program.GetAllTemplateNames(string,string)需要對象引用”,我知道這很愚蠢,但是我對C#還是很陌生,可以這樣做在調試此代碼方面有一些幫助。 甚至可以從Main函數調用靜態函數嗎? 有這些疑問。
由於ProcessInput
是靜態的,因此如果沒有此類的實例( Program
),則無法從那里調用instance(非靜態)方法GetAllTemplateNames
。
因此,您需要使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);
如果希望不使用類的實例而從其他靜態方法調用GetAllTemplateNames
方法,則應將其GetAllTemplateNames
static
:
public static void GetAllTemplateNames(String strParam, String strRetVal)
這也意味着此方法使用的字段( templateClient
和taskClient
也必須是靜態的)
或者另一種可能性是創建包含類的實例:
new Program().GetAllTemplateNames(strParam1, strRetVal);
更改此行
GetAllTemplateNames(strParam1, strRetVal);
至
new Program().GetAllTemplateNames(strParam1, strRetVal);
或將方法設為靜態。
該問題發生在GetAllTemplateNames(strParam1, strRetVal);
,以及對GetAllTemplateNames()
或ReturnAllTemplateNames()
任何其他調用。
這些方法不是靜態的,但是您是從靜態方法調用它們的! 您需要將它們設為靜態,或創建其包含類的實例,以便從諸如main()
類的靜態方法中調用它們。
主要功能是靜態的,這就是為什么您可以調用ProcessInput的原因。 但是,不能從靜態函數調用非靜態函數:GetAllTemplateNames必須是靜態函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.