2016-05-29 14 views
-1

私はいくつかの学習教材に取り組んでいて、理解できないコードに遭遇しました。私はサムライをインスタンス化するときコンストラクタの外側にあるメソッドC#

class Program 
{ 
    static void Main(string[] args) 
    { 
     var warrior = new Samurai(); 
     warrior.Attack("the evildoers"); 
     Console.ReadLine(); 
    } 

    class Sword 
    { 
     public void Hit(string target) 
     { 
      Console.WriteLine("Chopped {0} clean in half", target); 
     } 
    } 

    class Samurai 
    { 
     readonly Sword sword; 
     public Samurai() 
     { 
      this.sword = new Sword(); 
     } 

     public void Attack(string target) 
     { 
      this.sword.Hit(target); 
     } 
    } 
} 

私に関する限り、私は方法public Samurai()を実行します。 Attackメソッドがコンストラクタの外側にある場合、メソッドwarrior.Attackはどのように呼び出されますかpublic Samurai()

var warrior = new Samurai(); 

あなたはサムライクラスの新しいインスタンスを作成し、そして:

+0

'公共の侍()'、 'Samurai'クラスのコンストラクタではありません方法。メソッド 'Attack()'はすでにコンストラクタの外にあるので、私はあなたが実際に知りたいことで混乱しています。 –

+0

上記のコメントに、Samuraiクラスのオブジェクトを介してAttackメソッドを呼び出すことを追加しています –

+0

あなたに求めていることはわかりません。あなたがなぜ戦士か攻撃者かがサムライの攻撃方法を呼び出すのか、それともこのプロセスがどのような過程を理解していないのか分かりませんか? – hvd

答えて

2

サムライクラスのコンストラクタは、これが意味することは、あなたが以下のコードを書くときということで、実際に

public Samurai() 
{ 
    this.sword = new Sword(); 
} 

ですサムライクラスのコンストラクタのコードが実行されます。すなわち、このサムライのために剣のインスタンスが作成される(this.sword = new Sword())。

Swordクラスにはコンストラクタが含まれていないため、SamuraiコンストラクタによってSwordのインスタンスが作成されると、Swordクラスの他のものは呼び出されません。

new Samurai(); 

は、サムライクラスのインスタンスを作成する方法です。あなたは武士のクラスのインスタンスを作成しても、この新しく作成されたインスタンスへのご参考になる「戦士」と呼ばれる変数を、宣言している

var warrior = new Samurai(); 

を使用することにより

あなたは、この新しく作成されたインスタンスの「アタック」メソッドを呼び出したい時はいつでもそう、あなたのコードを使用することができます。

warrior.Attack("the evildoers"); 
+0

ありがとう! – d1du

関連する問題