2016-04-14 11 views
1

Bitte beachten Sie, dass dies unvollständiger Code ist, aber nur mit einem kleinen Problem konfrontiert, wie ich eine Menge von C++ OOP-Konzept verwenden. Ich könnte ein Problem haben, wenn ich versuche, von einer anderen Plattform zu wechseln.Getting Objektreferenz für die nicht statische Methode

ich Fehler beim Kompilieren und erklärte, nicht-statische Methode/Eigenschaft Fehler

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

Da Ihr 'Main' ist' static', können Sie nicht bekommen 'Studentische die ... * Ich glaube nicht, wissen, wo es erklärt wird! * – Ian

+0

Ja, in Main, 'Studenten' ist nicht erklärt. Es ist ein Instanzfeld in einer ganz anderen Klasse. In welcher Klasse ist Main überhaupt? Wie auch immer, du brauchst eine Instanz von '' in Main. –

+1

'insertDetail' ist eine Instanzmethode nicht statische Methode, erstellen Sie eine Instanz für' Class' und verwenden Sie sie. ex 'Klasse c = neue Klasse(); c.insertDetail (..) ' –

Antwort

3

Wie in den Kommentaren erwähnt, benötigen Sie eine Instanz, um die Instanzmethode zu verwenden.

Erstellen Sie eine Instanz für Class innerhalb 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(); 
    } 
} 

prüfen diese Demo

+0

Perfekt. Die Antwort möchte ich! – user2422414

-1

Vor allem nie Verwendung Class als Klassennamen. Für den Fehler müssen Sie mehr Informationen darüber geben, was Sie zu tun versuchen. Sie haben static Modifikator auf Ihre Methode hinzufügen:

public static void insertDetail(People stu) 

Oder wenn Sie es überschreiben zu sein als:

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

@Downvoters sein, bitte hinterlassen Sie zumindest einen kleinen Kommentar für das, was Sie nicht zufrieden sind. Sei nicht so schüchtern;) – Seprum

+0

1) Eine Klasse, die eine Klasse von Schülern in der Schule repräsentiert, kann vernünftigerweise Klasse genannt werden. 2) Die Lösung, nicht zu wissen, dass eine Klasse instanziiert wird, besteht nicht darin, alles in Ihrem gesamten Programm statisch zu machen. Bist du sogar OOP, Bruder? Die Lösung besteht darin, zu lernen, wie Klassen funktionieren. –

0

Sie diesen Fehler erhalten, wenn Sie einen statischen Aufruf einer Instanzmethode wie Object.ToString() verwendet den Typnamen als Qualifikationsmerkmal, wenn Sie wirklich eine Instanz benötigen.

Verwandte Themen