首頁 >後端開發 >C++ >為什麼在 C# 中從靜態方法呼叫非靜態方法時會出現「需要物件參考...」?

為什麼在 C# 中從靜態方法呼叫非靜態方法時會出現「需要物件參考...」?

Linda Hamilton
Linda Hamilton原創
2025-01-22 17:46:11544瀏覽

Why Does

錯誤:「非靜態欄位、方法或屬性需要物件參考...」

在C# 中,錯誤「物件引用非靜態欄位、方法或屬性需要...”在嘗試從靜態方法存取非靜態成員時出現。發生此錯誤的原因是靜態方法無法存取特定於實例的資料。

在提供的程式碼片段中,問題出現在宣告為靜態的「Main」方法中,而「volteado」和「siprimo」方法是非靜態的。若要解決此錯誤,必須將“siprimo”和“volteado”方法宣告為靜態。透過新增“static”關鍵字,可以在靜態“Main”方法中直接存取這些方法。這是修正後的程式碼:

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 isn't prime.");
            Console.ReadLine();
        }

        private static bool siprimo(long a) // Declare siprimo as static
        {
            // 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 static long volteado(long a) // Declare volteado as static
        {
            // Swap the received number
            long v = 0;
            while (a > 0)
            {
                v = 10 * v + a % 10;
                a /= 10;
            }
            return v;
        }
    }
}

以上是為什麼在 C# 中從靜態方法呼叫非靜態方法時會出現「需要物件參考...」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn