2012-03-17 9 views
0

私はクラスRobotを持っていますが、メソッドMove(...)を含める必要があります。 Robotがインスタンスクラスであるため、より多くのロボットを動作させることができます。 Move静的メソッドを作ることを考えました。なぜなら、すべてのロボットがどこかの場所に移動するときに同じロジックを使用するからです。インスタンスメソッドと静的メソッド(refパラメータ付き)

ロボットは、自分の位置に関する情報が含まれていますので、私はMove方法にRobotのインスタンスを渡す必要があります。パラメータDirectionもあり、enum(West、East、...)です。

何が良いの?なぜですか?

public static Move(ref Robot rob, Direction dir) 
{ 
    rob.Position = ... 
} 

または

public Move(Direction dir) 
{ 
    this.Positon = ... 
} 

任意のパフォーマンスやメモリの違いはありますか?

答えて

3

move()がインスタンスメソッドである必要がある理由をすべて正確に記述します。フィールドにアクセスする必要があり、インスタンスメソッドは暗黙的に 'this'というオブジェクト参照を持ちます。

あなたはこれでやりたい言語については特に問いませんでしたが、Javaではどちらの場合でもメモリにペナルティはなく、パフォーマンスは同じでなければならないほど近いはずです。他の言語については、私は同じことが本当であると思う。

1

メモリとパフォーマンスは同じである必要があります。

ただし、コードの読み方を考えてください。移動いくつかのロボット:

foreach(Robot robot in robots) { 
    robot.Move("left"); 
} 

がよりはるかにきれいです。また

foreach(Robot robot in robots) { 
    Robot.Move(robot,"left"); 
} 

は、あなたが現時点でどのプライベート状態(インスタンス変数)にアクセスしていない場合であっても、インスタンスメソッドはであなたを残しますあなたのクラスのパブリックインターフェイスを変更することなく、これを将来行う柔軟性。

関連する問題