实例方法与带参数参数的静态方法
问题描述:
我有一个类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");
}
而且,即使你是不是在此刻访问任何私有状态(实例变量),实例方法让你用在未改变您班级的公共界面的前提下,可以灵活地做到这一点。