我收到一條錯誤「非靜態字段,方法或屬性需要對象引用'Excel1.Program.GetAllTemplateNames(string,string)」我知道這是非常愚蠢,但我對C#來說很新,並且可以在調試此代碼時提供一些幫助。是否可以從Main函數調用靜態函數?我有這些懷疑。非靜態字段所需的對象引用
回答
改變這一行
GetAllTemplateNames(strParam1, strRetVal);
到
new Program().GetAllTemplateNames(strParam1, strRetVal);
或使該方法是靜態的。
你應該讓GetAllTemplateNames
方法,如果您希望能夠從其他的靜態方法調用它static
沒有一個類的實例:
public static void GetAllTemplateNames(String strParam, String strRetVal)
這也意味着該領域,此方法使用(templateClient
和taskClient
也必須是靜態的)
或另一種可能性是創建包含類的一個實例:
new Program().GetAllTemplateNames(strParam1, strRetVal);
非常感謝:) – user1463269
問題發生在線GetAllTemplateNames(strParam1, strRetVal);
,以及任何其他調用或ReturnAllTemplateNames()
。
這些方法不是靜態的,但你是從靜態方法調用它們!您需要將它們設置爲靜態,或者創建其包含類的實例,以便使用靜態方法(如main()
)調用它們。
是的,我得到了它..感謝很多:) – user1463269
由於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);
主要功能是靜態的,這就是爲什麼你可以調用ProcessInput。但是,您不能從靜態函數調用非靜態函數:GetAllTemplateNames必須是靜態函數。
- 1. 非靜態字段所需的對象引用
- 2. 對象引用對於非靜態字段是必需的
- 3. 對象引用是必需的非靜態字段
- 4. 使用uielement.GetValue(),錯誤「非靜態字段需要對象引用」
- 5. 非靜態字段,方法或屬性需要對象引用
- 6. 非靜態字段,方法或屬性需要對象引用
- 7. 問題與非靜態字段需要對象引用
- 8. 對象引用需要非靜態字段,方法或屬性
- 9. 非靜態字段,方法或屬性需要對象引用
- 10. 對象引用需要非靜態字段,方法或屬性
- 11. 非靜態字段,方法或屬性需要對象引用
- 12. User.Identity.Name非靜態字段需要對象引用
- 13. Devexpress:非靜態字段需要對象引用
- 14. C#錯誤:非靜態字段需要對象引用
- 15. 非靜態字段,方法或屬性需要對象引用
- 16. 非靜態字段需要對象引用。列表<>
- 17. 非靜態字段,方法或屬性需要對象引用
- 18. 對象引用需要非靜態字段,方法或屬性
- 19. 「非靜態字段需要對象引用」重新訪問
- 20. 對象引用需要非靜態字段
- 21. 非靜態字段需要對象引用
- 22. 非靜態字段方法或屬性需要對象引用
- 23. 獲取非靜態方法所需的對象引用
- 24. 對象引用對於非靜態字段,方法或屬性是必需的
- 25. 對非靜態字段的靜態引用(android)
- 26. 對象引用是非靜態字段的要求。 。 。 。 ,錯誤
- 27. 對象引用是必需的與構造函數的非靜態字段
- 28. 對象引用用於非靜態字段相同類
- 29. 「對象引用是必需的非靜態字段,方法或屬性'RxCard.dataobjects.Pharmacy.Area.Get'」
- 30. C#「的對象引用需要非靜態字段,方法或屬性」
謝謝你對我的幫助:) – user1463269