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

Performance 实例方法与带ref参数的静态方法,performance,reference,static,instance,Performance,Reference,Static,Instance,我有一个类Robot,它应该包含方法Move(…)。 Robot是一个实例类,您可以让更多机器人工作。我考虑使用静态方法来移动,因为所有的机器人在移动时都使用相同的逻辑 机器人包含有关其位置的信息,因此我需要将Robot的实例传递给Move方法。还有一个参数Direction,它是enum(西、东等) 什么更好?为什么 public static Move(ref Robot rob, Direction dir) { rob.Position = ... } 或 是否存在性能或内存差

我有一个类
Robot
,它应该包含方法
Move(…)
Robot
是一个实例类,您可以让更多机器人工作。我考虑使用静态方法来移动,因为所有的机器人在移动时都使用相同的逻辑

机器人包含有关其位置的信息,因此我需要将
Robot
的实例传递给
Move
方法。还有一个参数
Direction
,它是enum(西、东等)

什么更好?为什么

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


是否存在性能或内存差异

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


您没有特别询问要用哪种语言来实现这一点,但在Java中,这两种语言都不会对内存造成任何影响,而且性能应该非常接近,可能是相同的。对于其他语言,我怀疑也是如此。

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


您没有特别询问要用哪种语言来实现这一点,但在Java中,这两种语言都不会对内存造成任何影响,而且性能应该非常接近,可能是相同的。对于其他语言,我怀疑也是如此。

内存和性能应该是相同的

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

foreach(Robot robot in robots) {
    robot.Move("left");
}
比以下清洁得多:

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

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

内存和性能应该相同

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

foreach(Robot robot in robots) {
    robot.Move("left");
}
比以下清洁得多:

foreach(Robot robot in robots) {
    Robot.Move(robot,"left");
}
此外,即使您目前没有访问任何私有状态(实例变量),实例方法也让您可以灵活地在将来这样做,而无需更改类的公共接口