Я думал о том, как будет обрабатываться память в каком-то конкретном случае, который я объясню ( C # 4.0 ).
Для начала я прочитал Эрик Липперт ответ, чтобы знать, что будет вызываться всякий раз, когда я использую new для переменной типа struct
А теперь мне интересно,компилятор «создает» интеллектуальный код при конкретном использовании ключевого слова new
Если быть точным, что он будет делать, если new установлен на return инструкция или даже оператор = ?
Предположим, у нас есть структура Coord, определенная следующим образом:
struct Coord {
int x, y;
public Coord(int xx, int yy) {
x = xx;
y = yy;
}
}
Я буду использовать эту структуру для храненияположение и скорость в классах (предположим, мы называем их Entity), которые имеют геометрическое поведение
Entity определяется следующим образом:
class Entity {
private Coord m_pos, m_vel;
//...
public Entity() {
// ...
}
public Coord Position {
get {
return m_pos;
}
set {
m_pos = value;
}
}
public Coord Velocity {
get {
return m_vel;
}
set {
m_vel = value;
}
}
}
Моя основная программа содержит подпрограмму, которая просто обновляет мои сущности (ипоэтому их положение и скорость)
Теперь мой вопрос: какова цена, если я будуЧтобы обновить эти 2 элемента, используйте new :
Entity a; // initialized
...
private Coord getNewPosOf(Entity e) {
...
return new Coord(computed_x, computed_y);
}
public void routine() {
a.Velocity = new Coord(x_vel, y_vel);
a.Position = getNewPosOf(a);
}
Будет ли этот код выделять память в кратковременном хранилище и, следовательно, также копировать значения из конструктора в область памятио.Или компилятор позаботится о вещах и не будет выделять и копировать память в этом конкретном случае?
Примечание: у меня такое ощущение, что я делаю что-то не так, возможно, мне не следует использовать свойства для редактирования моего Coord-введите члены (или, что еще хуже, я не могу правильно использовать Свойства, и есть другой способ сделать то, что я хочу)