Метод экземпляра и статический метод с параметром ref - PullRequest
0 голосов
/ 18 марта 2012

У меня есть класс Robot, который должен содержать метод Move(...). Robot - это экземпляр класса, вы можете иметь больше роботов. Я думал о создании Move статического метода, потому что все роботы используют одну и ту же логику при перемещении куда-либо.

Роботы содержат информацию об их позиции, поэтому мне нужно передать экземпляр Robot методу Move. Также есть параметр Direction, который является enum (запад, восток, ...).

Что лучше и почему?

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

или

public Move(Direction dir)
{
    this.Positon = ...
}

Есть ли разница в производительности или памяти?

Ответы [ 2 ]

3 голосов
/ 18 марта 2012

Вы точно описываете все причины, по которым move() должен быть методом экземпляра.Ему нужен доступ к полям, а методы экземпляра неявно имеют ссылку на объект как 'this'.

Вы специально не спрашивали о языке, на котором вы хотите это сделать, но в Java нет штрафов заПамять для обоих и производительность должны быть настолько близки, что это может быть одинаковым.Я подозреваю, что то же самое верно и для других языков.

1 голос
/ 18 марта 2012

Память и производительность должны быть идентичны.

Однако подумайте, как будет читаться ваш код.Перемещение нескольких роботов:

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

намного чище, чем:

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

Кроме того, даже если вы не обращаетесь к какому-либо частному состоянию (переменным экземпляра) в данный момент, метод экземпляраоставляет вам возможность сделать это в будущем, не изменяя публичный интерфейс вашего класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...