2016-04-14 36 views
1

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

所有从未使用Class作为你的类名的编制,并指出当非静态方法/属性错误

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

创建一个实例。由于你的'Main'是'static',你不能得到'students'这... *我不知道它在哪里宣布!* – Ian

+0

是的,在Main中,'学生'没有被宣布。这是一个完全不同类的实例领域。无论如何,Main是什么课程?无论如何,你需要在Main中有一个''''的实例。 –

+1

'insertDetail'是一个不是静态方法的实例方法,为'Class'创建一个实例并使用它。 ex'Class c = new Class(); c.insertDetail(..)' –

回答

3

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

ClassMain

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

+0

完美。我想要的答案! – user2422414

-1

首先,我得到的错误。 至于错误,你需要提供更多关于你想要做什么的信息。你必须static修改添加到您的方法:

public static void insertDetail(People stu) 

或者,如果你想为它是覆盖比:

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

@Downvoters,请留下至少一些你不满意的小评论。不要太害羞;) – Seprum

+0

1)代表班级学生的班级可合理地称为班级。 2)不知道实例化类的修复不是让整个程序中的所有内容都变为静态的。你甚至是OOP,兄弟?解决的办法是学习班级的工作方式。 –

0

你得到这个错误,当你做一个静态调用像一个实例方法Object.ToString()使用类型名称作为限定符,当你真的需要一个实例时。

相关问题