#c#-4.0
#c #-4.0
Вопрос:
Я опрашиваю очередь событий и устанавливаю переменные в другом классе в зависимости от результата события.
while(!fin){
pollEvents();
}
И в обработчике событий:
case Sdl.SDL_MOUSEMOTION:
game.setdx(e.motion.y);
game.setdy(e.motion.x);
break;
Я новичок в C # из Java. Насколько я понимаю, эти значения будут передаваться по значению, а не по ссылке, и мне интересно, было бы лучше:
- сделайте dx и dy в другом классе общедоступными и просто установите значения
- используйте указатели на dx и dy и устанавливайте значения с их помощью
Комментарии:
1. С помощью предоставленного вами кода мы не можем сказать, будут ли аргументы передаваться по ссылке или по значению — это будет зависеть от типа переменной. (но в любом случае, это действительно не имеет значения) Вы, вероятно, хотите сформулировать свой вопрос скорее в духе «Каков наилучший способ», а не «каков наиболее эффективный способ» — не многим людям действительно нужен наиболее эффективный способ, что касается такой простой операции, как предоставление пары переменных объекту, оптимизация которой является задачей компилятора — вам, вероятно, следует больше беспокоиться о том, что проще всего читать / поддерживать 🙂
2. Насколько я понимаю, переменные будут передаваться по значению, если не добавлено ключевое слово ref. Основная проблема заключается в том, что Java превращает методы получения / установки в прямые назначения, которые не используют стек функций. Если C # использует стек функций, копирование и выталкивание переменных, передаваемых независимо от того, являются ли ссылки или примитивы, тогда обход методов получения и установки, по-видимому, оправдан. Кроме того, если учесть, что игровой цикл выполняется так быстро, как только может, и опрашивает события в каждом цикле, это непростая операция с парой переменных.
Ответ №1:
Разобрался с этим, поэтому решил поделиться. Свойства применимы как к классам, так и к структурам… У меня сложилось впечатление, что они предназначены исключительно для структур. В любом случае, насколько я понимаю, свойства подобны прямым присвоениям. Синтаксис:
class ThatWillStoreTheVal{
private bool ford=false;
//seter/getter method called a property
public bool fordP{
set{ford=value;}
get{return ford;}
}
}
class ThatSetsTheProperty{
private ThatWillStoreTheVal ob;
//the assignment. Note that the method like name is called not the variable name
...
if(e.key.keysym.sym==Sdl.SDLK_e) ob.fordP=true;
...
Комментарии:
1. Стивен, поскольку ты используешь C # v4, ты можешь использовать сохранение нажатия клавиши: public bool fordP { get; set; }