Каков наиболее эффективный способ установки переменных в другом классе с использованием C#

#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. Насколько я понимаю, эти значения будут передаваться по значению, а не по ссылке, и мне интересно, было бы лучше:

  1. сделайте dx и dy в другом классе общедоступными и просто установите значения
  2. используйте указатели на 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; }