实例方法与带参数参数的静态方法

问题描述:

我有一个类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 = ... 
} 

是否有任何性能或内存的区别?

您可以准确描述为什么move()应该是实例方法的所有原因。它需要访问字段,并且实例方法隐含地具有对象引用'this'。

您没有具体询问您想要执行此操作的语言,但是在Java中,两者都没有对内存造成任何损失,性能应该如此接近以至于它可能是相同的。对于其他语言,我怀疑同样如此。

内存和性能应该是相同的。

但是,请考虑您的代码将如何读取。移动几个机器人:

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

比更清洁:

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

而且,即使你是不是在此刻访问任何私有状态(实例变量),实例方法让你用在未改变您班级的公共界面的前提下,可以灵活地做到这一点。