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");
}
此外,即使您目前没有访问任何私有状态(实例变量),实例方法也让您可以灵活地在将来这样做,而无需更改类的公共接口