#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
, что вы делаете с обновленной переменной в вызывающем?