C#声明Enum并在功能中使用它,但我得到了CS0120

时间:2017-02-17 10:40:06

标签: c#

我有一个名为" NameSpace":

的命名空间
using System;
using System.Collections;

namespace NameSpace
{
    public enum Number
    {
        One,
        Two,
        Three
    }
    public sealed class Test1
    {
        public string test(Number num)
        {
            switch (num)
            {
                case Number.One:
                    return "1";
                case Number.Two:
                    return "2";
                case Number.Three:
                    return "3";
            }
            return "?";
        }
    }
}

当我打电话给这一行时:

Console.WriteLine(NameSpace.Test1.test(NameSpace.Number.One));

我收到错误:

  

错误CS0120:访问非静态成员`NameSpace.Test1.test(NameSpace.Number)'

需要对象引用
有人可以帮帮我吗?谢谢你变化多了!

4 个答案:

答案 0 :(得分:7)

您有两种选择:

您可以将test设为静态方法:

public static string test(Number num) { /*...*/ }

然后您不需要Test1的实例,而是需要在类型上调用test

Test1.test(Number.One);

或者您需要创建Test1类的实例:

Test1 instance = new Test1();
instance.test(Number.One);

由于test方法不使用Test1的任何实例成员,因此第一种方法就足够了。

答案 1 :(得分:3)

你可以做到

Console.WriteLine(new NameSpace.Test1().test(NameSpace.Number.One));

或使方法静态:

public static string test(Number num)

答案 2 :(得分:2)

你必须首先创建一个Test1类的对象,然后在其上调用测试方法

Console.WriteLine(new Test1().test(NameSpace.Number.One));

答案 3 :(得分:0)

这种情况正在发生,因为您没有将测试方法声明为静态。您必须将static关键字添加到方法声明中,例如public static string test...,或者创建Test1类的新实例。

Test1 t = new Test1();
Console.WriteLine(t.test(Number.One));

您应该详细了解staticobject-oriented programming