c#中非静态字段的对象引用

时间:2011-06-14 12:32:47

标签: c# object reference

我在c#中创建了一个函数:

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);
            }
        }
    }
}

我将该函数称为:

input_fields(init_xcor, init_ycor, init_pos, input);

但是在调用它时会出错:

  

需要对象引用   非静态字段,方法或   属性   “TestProject.Program.input_fields(INT,   int,char,   字符串)'xxx \ TestProject \ Program.cs 23 17 TestProject

我不想让函数变为静态,因为我也必须进行单元测试..

我该怎么做? ... 请帮帮我。

4 个答案:

答案 0 :(得分:7)

您必须创建包含此方法的类的实例才能访问该方法。

你不能简单地按照你正在尝试的方式执行方法。

MyClass myClass = new MyClass();
myClass.input_fields(init_xcor, init_ycor, init_pos, input);

您可以将方法创建为静态,以便您可以在不实例化对象的情况下访问它们,但是仍然需要引用类名。

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);

答案 1 :(得分:0)

您必须在此方法所属的类的对象上调用此方法。所以如果你有类似的东西:

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);

答案 2 :(得分:0)

由于函数是not static,您需要创建类的实例来调用该方法,例如,

MyClass cl = new MyClass();
cl.input_fields(init_xcor, init_ycor, init_pos, input);

否则将方法标记为静态,如

public static void input_fields....

并将其称为MyClass.input_fields(init_xcor,init_ycor,init_pos,input);

答案 3 :(得分:0)

从您的错误看起来,您正在从main()或静态Program类中的其他静态方法调用您的方法。简单地将您的方法声明为静态将解决问题:

public static void input_fields(int init_xcor, int init_ycor, char init_pos, string input)  ...

但这是一个快速解决方案,可能不是最佳解决方案(除非您只是简单地进行原型设计或测试功能。)如果您计划进一步使用此代码,您的方法应该移到一个单独的类中(静态或不是。)Program类及其main()函数是应用程序的入口点,而不是应用程序逻辑的唯一位置。