2016-03-25 7 views
-1

ここでコードを保存する方法を知りました。 initializeCombatship()を使用して、CombatShip goliath = new CombatShip();を何度も繰り返し入力する必要がないようにしました。私は船を作って10 HPにしたかったのです。あなたのご意見ありがとうございます。シンプルなコードを使用する方法の再利用エラー

public int HP { get;set; } 

public int initializeCombatship() 
{ 
    CombatShip goliath = new CombatShip(); //How do you make this public and not have to type this over and over? 
    int HP = 10; 
    return HP; 
} 

private void button_Click(object sender, RoutedEventArgs e) 
{ 
    initializeCombatship(); //won't let me just inherit goliath and HP 
    int L = goliath.LaserHit() - 5; 
    MessageBox.Show("Goliath hit by laser! You Ships HP = " + L + ""); 
} 
+3

可変スコープで読んでください。あなたがinitializeCombatshipメソッドの中でゴリアート変数を宣言したので、それはそこでしか利用できません。 – Kevin

答えて

1

代替はLazy Initializationパターンを使用することです。現在のインスタンスを閉じるには、nullGoliathプロパティに割り当てます。

遅延初期化は、オブジェクトのライフサイクルを適切に管理する限り、便利です。これは、クラスの生存期間中に必要となるかもしれないオブジェクトのいくつかが含まれている場合、多くの包含オブジェクトを持つクラスを初期化するコストを分散するために使用できます。場合によってはショートカットとしても便利です。ただし、getメソッドへの呼び出しは無料ではありません。

+0

ありがとうございます。これは、私が思っていたことであり、継承とメソッドとして複雑にすることを試みるだけです。 – DDJ

4

あなたはメソッド呼んでいる:

initializeCombatship(); 

をしかし、何がそのメソッドをするのでしょうか?内部的にはオブジェクトを作成しますが、そのオブジェクトでは何も行いません。したがって、メソッドが完了してオブジェクトがスコープから外れると、そのオブジェクトはなくなります。すべてのメソッドは整数を返します。あなたは使用しません。 goliath名前付きオブジェクト、したがって、エラーがある現在方法ではどこにも

goliath.LaserHit() 

次に、あなたは存在しないオブジェクトを使用しないようにしてください。変数goliathますが、次の行に、

CombatShip goliath = initializeCombatship(); 

その後:

public CombatShip initializeCombatship() 
{ 
    CombatShip goliath = new CombatShip(); //How do you make this public and not have to type this over and over? 
    goliath.HP = 10; 
    return goliath; 
} 

が続いて変数にその返されたオブジェクトを保存します。

1つのオプションは、あなたの方法からオブジェクトを返すことができこのメソッドによって返されたオブジェクトのインスタンスが存在します。

これは、システムの必要性に応じてさまざまな理由でコンストラクタの代わりによく使われるa "factory" methodのようになります。

1

Davidさんの提案でビル、あなたの方法は次のようになります。

public CombatShip initializeCombatship() 
{ 
    return new CombatShip { HP = 10 }; 
} 

あなたが戻ってきているオブジェクトを保持する変数のための本当の必要はありません。それはまだ行っていない場合今、あなたはGoliathプロパティを参照する任意の時間は、それはCombatShipインスタンスを作成します

CombatShip _goliath = null; 
CombatShip Goliath 
{ 
    get 
    { 
     if (_goliath == null) 
     { 
      _goliath = new CombatShip(); 
      _goliath.HP = 10; 
      // or: _goliath = new CombatShip() { HP = 10 }; 
     } 
     return _goliath; 
    } 
    set 
    { 
     _goliath = value; 
    } 
} 

関連する問題