我收到错误“非静态字段,方法或属性需要对象引用'Excel1.Program.GetAllTemplateNames(string,string)”我知道这很傻但是我对C#很新并且可以在调试此代码时提供一些帮助。甚至可以从Main函数调用静态函数吗?我有这些疑虑。
答案 0 :(得分: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);
答案 1 :(得分:3)
如果您希望能够在没有类实例的情况下从其他静态方法调用它,则应该创建GetAllTemplateNames
方法static
:
public static void GetAllTemplateNames(String strParam, String strRetVal)
这也意味着此方法使用的字段(templateClient
和taskClient
也必须是静态的)
或另一种可能性是创建包含类的实例:
new Program().GetAllTemplateNames(strParam1, strRetVal);
答案 2 :(得分:2)
更改此行
GetAllTemplateNames(strParam1, strRetVal);
到
new Program().GetAllTemplateNames(strParam1, strRetVal);
或使方法成为静态。
答案 3 :(得分:2)
问题发生在GetAllTemplateNames(strParam1, strRetVal);
行,以及对GetAllTemplateNames()
或ReturnAllTemplateNames()
的任何其他调用。
这些方法不是静态的,但您是从静态方法调用它们的!您需要将它们设置为静态,或者创建其包含类的实例,以便从main()
等静态方法调用它们。
答案 4 :(得分:1)
主要功能是静态的,这就是你可以调用ProcessInput的原因。但是,您不能从静态函数调用非静态函数:GetAllTemplateNames必须是静态函数。