2016-04-14 15 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

のインスタンスを作成します。 * – Ian

+0

はい、メインでは、「students」は宣言されていません。完全に異なるクラスのインスタンスフィールドです。メインはどんなクラスですか?とにかく、 '' Main ''のインスタンスが必要です。 –

+1

'insertDetail'は静的メソッドではなく、インスタンスメソッドです。クラスのインスタンスを作成して使用します。 ex 'クラスc = newクラス(); c.insertDetail(..) ' –

答えて

3

コメントによると、インスタンスメソッドを使用するインスタンスが必要です。

あなた `Main`は` static`あるので、あなたは私にはない `students`た... *得ることができませんでした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(); 
    } 
} 

Main内部チェックこの 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()は、実際にインスタンスが必要なときに型名を修飾子として使用します。