类错误 - 方法需要对象引用

Che*_*ire 1 c#

我目前正在学习C#,我正在努力为下一周的课程做准备,这将是课程和方法的介绍.为此,我尝试构建一个名为MaxBox的类,它是一个通用实用程序类,我可以存储一些常规函数,如"显示字符串"或"再次播放".我已经构建了我的主文件(Program)和我的类文件(MaxBox)以及第23行,第28行和第59行返回相同的一般错误'非静态字段,方法或属性需要对象引用' program.MaxBox.DisplayStr(字符串)".#57返回一个类似的错误'非静态字段,方法或属性'program.MaxBox.PlayAgain()'需要一个对象引用

我真是个新手,而且我正在与物体搏斗,我做了一些研究让自己走得这么远,但我还不懂语言还能够理解我读过的资源是什么说我想解决这个错误.非常感谢帮助和指导.我还在我的第一个星期,我一无所知.

程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading; // needed for close
using System.Threading.Tasks;

namespace a020_Breakcase_MeaningOfNames_C
{
class Program
{
    public void Play()
    {
        /*
         * Conditionals - Use switch/Case statement too:
         * Evaluate user data (name)
         * Return meaning of name evaluated
         * OR
         * Return 'Name not found' error message
         * Say goodbye
         */

        MaxBox.DisplayStr("What's in a name? Let's find out!");
        Console.Write("\n\n");

        do
        {
            MaxBox.DisplayStr("Enter Name: ");

            string uName = Console.ReadLine().ToLower();
            switch (uName)
            {
                case "doyle":
                    Console.WriteLine("Doyle means descendant of Dubhghalle");
                    break;
                case "fiona":
                    Console.WriteLine("Fiona is considered to be a Latinised form of the Gaelic word fionn, meaning \"white\", \"fair\".");
                    break;
                case "hunter":
                    Console.WriteLine("Hunter means to search with purpose");
                    break;
                case "liam":
                    Console.WriteLine("This name is a short form of the Irish name Uilliam (William) which is now use independently as a given name. As a Hebrew name, Liam means \"my people; I have a nation\".");
                    break;
                case "max":
                    Console.WriteLine("Short for of Maximilian, Maxwell, and the various name using it as a first syllable.");
                    break;
                case "portia":
                    Console.WriteLine("It is of Latin origin. Feminine form of a Roman clan name. Portia was used by Shakespeare as the name of a clever, determined young heroine in \"The Merchant of Venice\" who disguises herself as a lawyer to save her husband's life.");
                    break;

                default:
                    Console.WriteLine("I'm sorry but I don't know the meaning of the name " + uName + ".");
                    break;
            }

        } while (MaxBox.PlayAgain());

        MaxBox.DisplayStr("C#eers!");
    }


    static void Main(string[] args)
    {
        Program myProgram = new Program();
        myProgram.Play();

        Console.Read();
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我的课:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace a020_Breakcase_MeaningOfNames_C
{
class MaxBox
{
    /*
     * MaxBox is my general functions class
     * Contains 
     * DisplayStr() - Display the string given
     * PlayAgain() - If True, runs program again
     */

    public String uName;
    public String command;

    public void DisplayStr(String StrTxt)
    { Console.Write(StrTxt); }

    public Boolean PlayAgain()
    {
        Console.Write("\n\nDo you want to play again? (y)es or (n)o: ");
        String command = Console.ReadLine().ToLower().Trim();

        if (command == "y" || command == "yes") return true;
        return false;
    }

}
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*lis 6

MaxBox的方法不是静态的,你需要它的一个实例.

MaxBox maxBox = new MaxBox();
Run Code Online (Sandbox Code Playgroud)

在你的主要课程的开头.然后

maxBox.DisplayStr(....)
Run Code Online (Sandbox Code Playgroud)

另外,为了让你思考,你可以替换:

if (command == "y" || command == "yes") return true;
    return false;
Run Code Online (Sandbox Code Playgroud)

return (command == "y" || command == "yes");
Run Code Online (Sandbox Code Playgroud)