获取非静态方法所需的对象引用

Getting Object reference required for the non-static method

请注意,这是未完成的代码,只是面临一些小问题,因为我使用了很多 C++ OOP 概念。我在尝试从另一个平台进行更改时可能会遇到一些问题。

我在编译和声明非静态时出错 method/property 错误

using System;

public class People
{
    string name;
    int age;
    int height;
    public virtual void insertDetail(People stu)
    {
        Console.Write("Please enter name : ");
        stu.name = Console.ReadLine();
        Console.Write("Please enter age  : ");
        while(!int.TryParse(Console.ReadLine(), out stu.age))
        {
            Console.WriteLine("You enter characters! Please re-insert");
        }
        Console.Write("Please enter height: ");
        while(!int.TryParse(Console.ReadLine(), out stu.height))
        {
            Console.WriteLine("You enter characters! Please re-insert");
        }
    }
}

public class Class : People
{
    static People[] students = new People[5];
    public override void insertDetail(People stu)
    {
        Console.WriteLine("==================================");
        base.insertDetail(stu);
    }


    public static void Main(string[] args)
    {

        for (int i = 0; i < students.Length; i++)
        {
            students[i] = new People();
            insertDetail(students[i]);
        }

        Console.ReadKey();
    }
}

首先永远不要使用Class作为你的class名字。 至于错误,您需要提供有关您要做什么的更多信息。您必须在方法中添加 static 修饰符:

public static void insertDetail(People stu)

或者如果你想让它被覆盖:

public virtual void insertDetail()
{
    this.name = "Some name";
    //...
}

当您在确实需要实例时使用类型名称作为限定符对 Object.ToString() 等实例方法进行静态调用时,会出现该错误。

如评论所述,您需要一个实例才能使用实例方法。

Main

中为 Class 创建一个实例
public class Class : People
{
    static People[] students = new People[5];
    public override void insertDetail(People stu)
    {
        Console.WriteLine("==================================");
        base.insertDetail(stu);
    }


    public static void Main(string[] args)
    {
        Class c = new Class(); // this is required to access insertDetail

        for (int i = 0; i < students.Length; i++)
        {
            students[i] = new People();
            c.insertDetail(students[i]);
        }

        Console.ReadKey();
    }
}

勾选这个Demo