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

时间:2012-03-17 22:29:40

标签: performance reference static instance

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

有任何性能或内存差异吗?

2 个答案:

答案 0 :(得分:3)

您准确描述了move()应该是实例方法的所有原因。它需要访问字段,而实例方法隐含地将对象引用为“this”。

你没有具体询问你想要这样做的语言,但是在Java中,内存也没有任何惩罚,性能应该非常接近,以至于它可能是相同的。对于其他语言,我怀疑情况也是如此。

答案 1 :(得分:1)

内存和性能应该相同。

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

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

比以下更清洁:

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

此外,即使您目前没有访问任何私有状态(实例变量),实例方法也可以让您在未更改类的公共接口的情况下灵活地执行此操作。