C# 获取非静态方法所需的对象引用 请注意,这是一个未完成的代码,但只是面对一些小问题,因为我使用了大量的C++ OOP概念。在尝试从其他平台更改时,我可能会遇到一些问题

C# 获取非静态方法所需的对象引用 请注意,这是一个未完成的代码,但只是面对一些小问题,因为我使用了大量的C++ OOP概念。在尝试从其他平台更改时,我可能会遇到一些问题,c#,non-static,C#,Non Static,我在编译并声明非静态方法/属性错误时出错 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();

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

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();
    }
}
使用系统;
公营阶层人士
{
字符串名;
智力年龄;
内部高度;
公共虚拟void insertDetail(人员stu)
{
控制台。写入(“请输入名称:”);
stu.name=Console.ReadLine();
控制台。写(“请输入年龄:”;
而(!int.TryParse(Console.ReadLine(),out stu.age))
{
Console.WriteLine(“您输入字符!请重新插入”);
}
控制台。写(“请输入高度:”);
而(!int.TryParse(Console.ReadLine(),out stu.height))
{
Console.WriteLine(“您输入字符!请重新插入”);
}
}
}
公共课:人
{
静态人物[]学生=新人[5];
公共覆盖void insertDetail(人员stu)
{
Console.WriteLine(“=================================================”);
基础.插入详图(stu);
}
公共静态void Main(字符串[]args)
{
for(int i=0;i
首先不要使用
作为你的类名。 至于错误,你需要提供更多关于你想做什么的信息。您必须在方法中添加
静态
修饰符:

public static void insertDetail(People stu)
或者,如果您希望将其覆盖,则:

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

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

如注释中所述,您需要一个实例才能使用实例方法

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();
    }
}
公共类:人
{
静态人物[]学生=新人[5];
公共覆盖void insertDetail(人员stu)
{
Console.WriteLine(“=================================================”);
基础.插入详图(stu);
}
公共静态void Main(字符串[]args)
{
Class c=new Class();//这是访问insertDetail所必需的
for(int i=0;i

选中此项

因为您的
静态
,所以您无法获取
学生
哪个。。。我不知道在哪里申报的!是的,大体上,
学生
没有声明。它是一个完全不同类中的实例字段。到底哪门课是主修课?总之,您需要一个``在Main中的实例。
insertDetail
是一个实例方法而不是静态方法,请为
Class
创建一个实例并使用它。ex
Class c=新类();c、 insertDetail(..)
您还需要调用insertDetail的人员实例和类。人员应该是
列表,而不是数组。然后你可以添加任意数量的。对不起。我重新编辑我的代码@选民们,请留下一些你不满意的小评论。别那么害羞;)1) 一个班级代表一个班级的学生在学校可以合理地称为班级。2) 不知道实例化一个类的修复方法不是使整个程序中的所有内容都是静态的。兄弟,你真的会这样吗?解决办法是学习类是如何工作的。我想要的答案!