繁体   English   中英

Object 参考 c# 中的非静态字段

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM