获取非静态方法所需的对象引用
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
请注意,这是未完成的代码,只是面临一些小问题,因为我使用了很多 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