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

时间:2016-04-14 02:29:49

标签: c# non-static

请注意,这是未完成的代码,但只是面临一些小问题,因为我使用了大量的c ++ OOP概念。尝试从其他平台进行更改时,我可能会遇到一些问题。

编译时出现错误并声明非静态方法/属性错误

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();
    }
}

3 个答案:

答案 0 :(得分:3)

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

Class

中创建Main的实例
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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

首先,从不使用Class作为您的班级名称。 至于错误,您需要提供有关您要执行的操作的更多信息。您必须在方法中添加static修饰符:

public static void insertDetail(People stu)

或者如果你想覆盖它而不是:

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