Самоссылка в качестве аргумента

#c# #class #reference

#c# #класс #ссылка

Вопрос:

У меня есть два класса, Game1 и Scene . Game1 Вызывается Tick() функция активной сцены.

Функция выглядит следующим образом:

 abstract public List<IRenderable> Tick(ref KeyboardState ks, ref MouseState ms, ref Game1 game);
  

Как я мог бы передать Game1 себя в качестве ссылки? Использование this не работает, потому что оно доступно только для чтения.

Комментарии:

1. Правильно ли, что операция является Game1. Tick()?

2. Метод является абстрактным? это реализовано?

3. Это ссылка по умолчанию

4. Это, конечно, реализовано.

5. Я рискну предположить, что ни один из этих трех параметров на самом деле не нуждается в ref

Ответ №1:

Вы можете создать отдельную переменную:

 var t = this;
var result = scene.Tick(ref ks, ref ms, ref t);
  

хотя вы не сможете назначить this t после возврата метода. Неясно, почему параметры to Tick объявляются как ref however .

Комментарии:

1. KeyboardStates и MouseStates — довольно тяжелые элементы.

2. @PearlSek — Это структуры? Если они больше ~ 16 байт, вы должны сделать их классами. Если это классы, то вам нужно передать их только ref в том случае, если вы присваиваете им значение в методе.

3. Возможно, элементы клавиатуры и мыши, которые являются классами из XNA, не нужны ref ; но мне нужно дать ссылку на Game1, чтобы Сцена могла действовать за нее.

4. @PearlSek — Вам не нужно проходить мимо ref , если вы не присваиваете значение game внутри Tick . Если вам нужно пройти мимо ref , что вы делаете с обновленной переменной в вызывающем?