不能使用公共访问修饰符

时间:2019-11-27 07:53:45

标签: c# syntax-error

很抱歉,如果这是一个非常愚蠢的问题,但是我在弄乱和摆弄我从YouTube初学者教程中学到的东西,我有点迷失了。谁能告诉我为什么在public破坏所有内容之前使用fields访问说明符?

namespace ConsoleApp1
{
    class Methods
    {



        static void Main(string[] args)
        {
            public int _first, _second, _third, _fourth, _fifth;


        for (int i=1;i<=5;i++)
            {
                Console.WriteLine("Enter {0}st number:", i);
                Console.ReadLine();
                switch (i)
                {
                    case 1:
                        _first = i;
                        break;
                }
            }

        }

using Public Not Using Public

2 个答案:

答案 0 :(得分:0)

问题是范围。

函数范围内的字段(最好在函数或方法内部使用变量)不能是“公共的”或“受保护的”或...不,不是容器范围的私有的,当然,不是不需要访问词。

如果您在函数之外创建字段,则可以将其设为公共,私有,内部...等...

您不能使用对象或结构来制作字段。

namespace ConsoleApp1
{

    public int _secondThing // baaaad

    class Methods
    {

        public static int _thing; //good
        int _thing; //good, it's private;
        private int _thing; //good, it's the same
        public int _firstThing; //good

        static void Main(string[] args)
        {
            public int _first, _second, _third, _fourth, _fifth; //baaad
            int _first, _second; //good
        }
    }
}

答案 1 :(得分:0)

正如DrkDeveloper所提到的,这是变量范围的问题。根据定义变量的位置,它仅存在于该特定范围及其所有子范围内,而不存在于父范围内。因此,在类级别定义somethin使其可以在整个类中访问,这在其所有成员中都是如此。另一方面,在成员(例如方法)中定义变量会使该变量仅存在于该方法的特定范围内。您无法从其范围之外的任何地方访问它。

没有访问修饰符的第一个代码可以工作,因为变量是在该方法中定义的-我们将其称为局部变量。第二个带有访问修饰符的代码会将这些变量转换为 class 成员(在这种情况下为字段)。因此,您应该在应该具有类范围的方法中定义一个成员。这当然是行不通的。

因此,您可以将变量保留为局部变量,或者在班级内public static

namespace ConsoleApp1
{
    class Methods
    {
        public int _first, _second, _third, _fourth, _fifth;

        static void Main(string[] args)
        {
            for (int i=1;i<=5;i++)
            {
                Console.WriteLine("Enter {0}st number:", i);
                Console.ReadLine();
                switch (i)
                {
                    case 1:
                        _first = i;
                        break;
                }
            }
        }
    }
}