猿问

错误:“非静态字段、方法或属性…需要对象引用”。

错误:“非静态字段、方法或属性…需要对象引用”。

我正在用C#创建一个应用程序。它的功能是计算给定的是素数,以及是否相同的交换数也是素数。

当我在VisualStudio中构建我的解决方案时,它说“非静态字段、方法或属性需要对象引用.”。我对“volteado”和“siprimo”方法有这个问题。

问题在哪里,我如何解决?

namespace ConsoleApplication1{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Write a number: ");
            long a= Convert.ToInt64(Console.ReadLine()); // a is the number given by the user


            long av = volteado(a); // av is "a" but swapped

            if (siprimo(a) == false && siprimo(av) == false)
                Console.WriteLine("Both original and swapped numbers are prime.");
            else
                Console.WriteLine("One of the numbers isnt prime.");
            Console.ReadLine();
        }

        private bool siprimo(long a)
        {
            // Evaluate if the received number is prime
            bool sp = true;
            for (long k = 2; k <= a / 2; k++)
                if (a % k == 0) sp = false;
            return sp;
        }

        private long volteado(long a)
        {
            // Swap the received number
            long v = 0;
            while (a > 0)
            {
                v = 10 * v + a % 10;
                a /= 10;
            }
            return v;
        }
    }}


红颜莎娜
浏览 724回答 3
3回答

catspeake

不能从静态方法访问非静态成员。(请注意,Main()是静态的,这是.NET的要求。只需使siprimo和volteado静态,将静态关键字放在他们前面。例如:&nbsp;static&nbsp;private&nbsp;long&nbsp;volteado(long&nbsp;a)

慕沐林林

简单地添加static在声明这两种方法时,编译时的错误就会消失!默认情况下,C#方法中的实例方法,他们接受了隐含的“自我”论点。通过使它们是静态的,不需要(也不需要)这样的参数,该方法当然必须避免访问类的任何实例(非静态)对象或方法。关于静态方法的更多信息如果类和方法的访问修饰符(公共和私有)都是正常的,那么可以从任何地方调用静态方法,而不必事先实例化类的一个实例。换句话说,静态方法与以下语法一起使用:&nbsp;&nbsp;&nbsp;&nbsp;className.classMethod(arguments)rather&nbsp;than &nbsp;&nbsp;&nbsp;&nbsp;someInstanceVariable.classMethod(arguments)在System.Math类中找到了一个典型的静态方法示例,我们可以调用以下这些方法&nbsp;&nbsp;&nbsp;Math.Sqrt(2) &nbsp;&nbsp;&nbsp;Math.Cos(Math.PI)没有实例化“数学”类(事实上,我甚至不知道这样的实例是否可能)
随时随地看视频慕课网APP
我要回答