2017-08-22 4 views
2

私はC#についてすべてを学んでおり、継承部分に到着しました。だから私は最初、私はすべてのものをテストするための簡単なサブクラスを作成したいもちろんその後、次の基本クラス初心者相続問題C#

class Soldier 
{ 
    public int _health = 0; 
    public int id = 0; 
    public int level = 0; 
    public string name = "soldier"; 

    public void Identify(int h, int ID, int lvl, string n) 
    { 
     Console.WriteLine("Health: " + h + "\nid: " + ID + "\nLevel: " + lvl + "\nName: " + n); 
    } 
} 

を書いた:

class Knight : Soldier 
{ 
    level = 2; 
    public void Ride(string name) 
    { 
     Console.WriteLine(name + " can ride a mount"); 
    } 
} 

をしかし、私はプログラムを実行すると、それは私にエラー」を与えます名前 'レベル'は現在のコンテキストに存在しません "。

私は間違ったことをしているので、私はそれを検索して、ユーザーが私のようなプロパティを上書きしても何の問題もなく、「ベース」を追加したケースを見つけました。プロパティの前に。しかしどちらもうまくいきません。

ありがとうございます。

+5

これはプロパティではなく、フィールドです。 – juharr

答えて

3

あなたは、たとえば、クラスconstructorにあるようにそのコードを必要とする:ここで何が起こっている

class Knight : Soldier 
{ 
    //class constructor here 
    public Knight() 
    { 
     level = 2; 
    } 

    public void Ride(string name) 
    { 
     Console.WriteLine(name + " can ride a mount"); 
    } 
} 
5

あなたはクラス定義の内側にクラスレベルの変数を設定しようとしているということです、許可されていません。クラススコープ内のクラス変数の宣言と初期化のみが可能です。クラスを作成するときに変数を設定するには、コンストラクタの内部に変数を設定する必要があります。

class Knight : Soldier 
{ 
    public Knight() : base() 
    { 
     base.level = 2; 
    } 
    public void Ride(string name) 
    { 
     Console.WriteLine(name + " can ride a mount"); 
    } 
}