2012-03-17 115 views
0

我有一個類Robot,它應該包含方法Move(...)Robot是一個實例類,你可以有更多的機器人工作。我考慮製作Move靜態方法,因爲所有機器人在移動某處時都使用相同的邏輯。實例方法與帶參數參數的靜態方法

機器人包含有關其位置的信息,因此我需要將Robot的實例傳遞給Move方法。還有參數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"); 
} 

而且,即使你是不是在此刻訪問任何私有狀態(實例變量),實例方法讓你用在未改變您班級的公共界面的前提下,可以靈活地做到這一點。