[英]Object reference for non-static field in c#
我在 c# 中创建了一个 function 为:
public void input_fields(int init_xcor, int init_ycor, char init_pos, string input)
{
char curr_position = 'n';
foreach (char c in input)
{
if (c == 'm')
{
Move mv = new Move();
if (curr_position == 'e' || curr_position == 'w')
{
init_xcor = mv.Move_Step(curr_position, init_xcor, init_ycor);
}
else
{
init_ycor = mv.Move_Step(curr_position, init_xcor, init_ycor);
}
}
}
}
我将 function 称为:
input_fields(init_xcor, init_ycor, init_pos, input);
但是在调用它时会出错:
非静态字段、方法或属性 'TestProject.Program.input_fields(int, int, char, string)' xxx\TestProject\Program.cs 23 17 TestProject 需要 object 引用
我不想制作 function static 因为我还必须进行单元测试..
我该怎么办? ...请帮帮我。
您必须创建一个包含此方法的 class 实例才能访问该方法。
您不能简单地以您正在尝试的方式执行方法。
MyClass myClass = new MyClass();
myClass.input_fields(init_xcor, init_ycor, init_pos, input);
您可以将方法创建为 static,这样您就可以在不实例化 object 的情况下访问它们,但是您仍然需要引用 class 名称。
public static void input_fields(int init_xcor, int init_ycor,
char init_pos, string input)
接着
MyClass.input_fields(init_xcor, init_ycor, init_pos, input);
您必须在此方法所属的 class 的 object 上调用此方法。 所以如果你有类似的东西:
public class MyClass
{
public void input_fields(int init_xcor, int init_ycor, char init_pos, string input)
{
...
}
...
}
你必须这样做:
MyClass myObject = new MyClass();
myObject.input_fields(init_xcor, init_ycor, init_pos, input);
由于 function not static
,因此需要创建 class 的实例来调用该方法,例如,
MyClass cl = new MyClass();
cl.input_fields(init_xcor, init_ycor, init_pos, input);
否则将方法标记为 static 就像
public static void input_fields....
并将其称为 MyClass.input_fields(init_xcor, init_ycor, init_pos, input);
从您的错误看来,您正在从 main() 或 static 程序 class 中的其他一些 static 方法调用您的方法。 只需将您的方法声明为 static 即可解决此问题:
public static void input_fields(int init_xcor, int init_ycor, char init_pos, string input) ...
但这是一个快速解决方案,可能不是最好的解决方案(除非您只是简单地进行原型设计或测试功能。)如果您计划进一步处理此代码,则应将您的方法移动到单独的 class(静态或非静态)中。程序 class 及其 main() function 是应用程序的入口点,而不是应用程序逻辑的唯一位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.