2016-12-09 10 views
0

ありがとう、本当にありがとうございます。そのことは、どれくらい私が学ばなければならないかを実感します。それを反映させるために私が設定し、あなたの例を適応させたいという方向性です。しかし、それは今求めている。私の静的void Mainの終わりに。私は前にこれを追加したことはないが、体はextern、abstractを宣言するよう求めている。また、メインでリンクを設定しないようにするには、次の構文を使用しています。gh.setName( "Great Hall"); gh.setN(dr);偉大なホールと抽選室の間の北のリンクを設定するために。何か案が?getとsetメソッドを定義する方法

private string RoomName; 
     private Room N = null; 
     private Room E = null; 
     private Room S = null; 
     private Room W = null; 

     public Room X { get; private set; } 

     public void setName(string N) 
     { 
      RoomName = N; 
     } 

     public void setN(Room X) 
     { 
      N = X; 
     } 

     public void setE(Room X) 
     { 
      E = X; 
     } 

     public void setW(Room X) 
     { 
      W = X; 
     } 

     public void setS(Room x) 
     { 
      S = X; 
     } 


     public Room getN() 
     { 
      return N; 
     } 

     public Room getE() 
     { 
      return E; 
     } 

     public Room getS() 
     { 
      return S; 
     } 

     public Room getW() 
     { 
      return W; 
     } 




     static void Main(string[] args) 

     Room gh = new Room(); 
     Room kit = new Room(); 
     Room Pan = new Room(); 
     Room Dun = new Room(); 
     Room dr = new Room(); 
     Room lib = new Room(); 
     Room din = new Room(); 
     Room sr = new Room(); 
     Room weap = new Room(); 
     Room tow = new Room(); 
     Room gal = new Room(); 
     Room tr = new Room(); 

     gh.setName("Great Hall"); 
      gh.setN(dr); 
+5

あなたの 'setN'メソッドがコンパイルされていないのは、宣言の最後に不正な'; 'があることです。しかし、回答ごとにプロパティについて学ぶ必要があります。 –

+0

はい、それは ';'です。あなたのエラーメッセージの理由は、 'setN'の終わりにセミコロンを置くと、本体(' {} 'で囲まれた部分)なしでメソッド宣言が終了するからです。これは 'extern'、' abstract'、 'partial'メソッドに対してのみ許可されています。 – Sefe

+0

Mainメソッドもメソッドなので、コードを '{'と '}'の中に入れておく必要があります –

答えて

0

あなたは、このように明示的にプロパティを処理することができます:

private string _roomName; 

public string roomName { 
    get { 
     return _roomName; 
    } 
    set { 
     _roomName = value; 
    } 
} 
2

C#では、プロパティに対処するための簡単な方法を使用することができます。

public string RoomName {get; set;} 

GETSETでデフォルトプロパティを作成します。それはまたあなたのためのフィールドを作成する、あなたはそれを気にする必要はありません。

あなたが何かをする必要がある場合はより多くのあなたが使用できるフィールド:あなたは

private string _roomName; 
public string RoomName => _roomName; 

private string _roomName; 

public string RoomName { 
    get { 
     //do something before returning 
     return _roomName; 
    } 
    set { 
     //do something while value is being set 
     _roomName = value; 
    } 
} 

はあなたが同様にその構文を使用することができます新しいC#(6.0)を使用している場合 プロパティを2つのメソッドのセットに変換すると、次のようになります。

public string Get_RoomName() { 
    return _roomName; 
} 

public void Set_RoomName(string value) { 
    _roomName = value; 
} 
あなたの誤差に応じて最初の場所で
1

、:

SetN must declare a body as extern, abstract or partial and this comes up for my both get and set methods.

あなたclass Roomの終わりに}を閉じてください!

;を削除した後に、public void setN(Room X);

これは短いバリアントである:

public string Name{ get; set; } 

と、これは明示的なバージョンです:

private Room myN; 

public Room N 
{ 
    get { return myN; } 
    set { myN = value; } 
} 
あなたがgetおよびsetメソッドの機能性を得るために propertiesを使用することができますC#ので

拡張バージョンでは、外部からアクセスできないプライベートフィールドがあり、あなたはパブリックプロパティを持っています。それはset { myVar = value; } セクションを持っています。これはあなたの設定メソッドと同じです。

EDIT:@ Jens:valueが示唆するように、外部からsetメソッドに渡される値を含むデフォルトのパラメータです。それは、常にvalueと呼ばれ、expliictlyクラス変数のようにそれを使用することです設定する際の規則を呼び出すC#の

で宣言されていません。

Room AnyRoom = new Room(); 
Room X = new Room(); 
AnyRoom.N = X; 
+0

あなたは彼がそれを「プライベート」と宣言したことを忘れています。 – ThePerplexedOne

+0

これをさらに明確にするために、 'value'は外部から' set'メソッドに渡される値を含むデフォルトのパラメータです。これは常に 'value'と呼ばれ、C#で明示的に宣言されていません。 – Jens

+0

@ ThePerplexedOneはJavaのアプローチのようです。プライベートフィールドとパブリックget-setメソッドを持つ。このプライベートフィールドにアクセスしたくない場合は、なぜget-methodを書くのが迷惑でしょうか –

関連する問題