请注意,这是未完成的代码,但只是面临一些小问题,因为我使用了大量的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();
}
}
答案 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";
//...
}