Я пытаюсь написать простую игру. Я хочу создать объект «контроллер движения», который будет обрабатывать инструкции перемещения от двигателя. Я также хотел бы, чтобы этот объект выставлял метод, который бы проверял его состояние и возвращал true/false в зависимости от того, готов ли он двигаться или нет. Состояние будет сохранено как группа булевых переменных. Поскольку их много, я решил объединить их в новую структуру под названием «флаги». Вот как это выглядит более или менее:C# accessing struct members внутри методов класса
public class movContr
{
int movId;
public struct flags
{
bool isMoving;
bool isLocked;
bool isReady;
(...)
}
public bool CheckReadiness()
{
if(flags.isReady==true) return true;
return false;
}
}
Теперь проблема это не будет компилироваться, ошибки являются:
error CS0120: An object reference is required to access non-static member
обижая линии являются:
if(flags.isReady==true) return true;
Я предположим, что C# не рассматривает структуры, подобные блогам памяти, которые просто содержат переменные в заказах, но, как и некоторые «особые» кузены класса.
Вот мои вопросы:
как я должен ручке обращающегося членов класса структуры в своих методах? Как я могу ссылаться на методы класса для членов его будущих экземпляров? Я попробовал это вместо этого:
if(this.flags.isReady==true) return true;
но я получаю ту же ошибку.
В качестве альтернативы, если инкапсуляция переменных моего флага с помощью «struct» не является правильным способом, что это такое?
Я попытался найти ответ сам, но поскольку все ключевые слова, которые я мог придумать, очень общие, так же как и результаты. Большинство из них касаются статических членов, которые здесь не являются решением, так как мне нужны несколько независимых экземпляров класса movContr.
Я не уверен, что вам даже нужна структура. Похоже, вы можете просто создавать свойства или поля в своем классе для каждого из полей в этой структуре. – juharr
не могу поверить, что это было так просто, извините, я не могу принять более одного ответа :(Несколько дней я чувствую, что должен придерживаться ассемблера, которого я клянусь @juharr, так как это находится на очень ранней стадии, и моя память очень плохо, я хочу, чтобы он был максимально читабельным, если мне нужно сделать перерыв в проекте. Он не является структурой, но я хотел бы обращаться к флагам так же, как movContrObj.flags. isMoving, по крайней мере на данный момент – Searant
Лично я считаю, что использование структуры здесь менее читаемо, но если вам более удобно, тогда нет никакого реального вреда. – juharr