У меня проблемы с иерархией объектов. В частности, массив в объекте, который используется в другом объекте.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 У меня проблемы с иерархией объектов. В частности, массив в объекте, который используется в другом объекте.

Сообщение Anonymous »

Это программа на C#.
У меня на плате есть несколько микроконтроллеров, каждый из которых может иметь разные конфигурации.
Чтобы описать это, я создаю класс Config, который определяет конфигурацию (имя, число и т. д.)
Среди полей конфигурации находится массив из 4 байтов.
Сейчас я делаю пару конфигураций, затем задаю их значения.
Это работает.
Теперь я попробую одновременное создание конфигураций и установка значений. Это не работает. В итоге массив имеет одинаковые значения в обеих конфигурациях, даже если они являются отдельными объектами. Никаких предупреждений и ошибок.
Вот код. В комментариях вы узнаете, что пошло не так.
public class Config
{
public byte ConfigNum { get; set; }
public byte[] ConfigData { get; set; } = new byte[4];
}
static void Main()
{
Config c0 = new Config();
Config c1 = new Config();

c0.ConfigNum = 11;
c0.ConfigData[3] = 13;

c1.ConfigNum = 22;
c1.ConfigData[3] = 23;

// Check whats in there
Console.WriteLine(c0.ConfigNum); // Expect 11
Console.WriteLine(c0.ConfigData[3]); // Expect 13
Console.WriteLine(c1.ConfigNum); // Expect 22
Console.WriteLine(c1.ConfigData[3]); // Expect 23

// Now try to make configurations on the fly
byte[] RConfigData1 = { 11, 12, 13, 14 }; // Make a temporary array

Config c3 = new Config() // Make and add a configuration with the values in the temporary array
{
ConfigNum = 55,
ConfigData = RConfigData1
};

RConfigData1[3] = 24; // change a value in the temporary array

Config c4 = new Config() // Make and add a configuration with the values in the temporary array
{
ConfigNum = 66,
ConfigData = RConfigData1
};

// Check whats in there
Console.WriteLine(c3.ConfigNum); // Expect 55
Console.WriteLine(c3.ConfigData[3]); // Expect 14 BUT GET 24
Console.WriteLine(c4.ConfigNum); // Expect 66
Console.WriteLine(c4.ConfigData[3]); // Expect 24
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... in-an-obje
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Создайте словарь Python из дерева объектов, связанных иерархией родитель-потомок.
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Проблема с иерархией и отношениями TPC в EF Core 8 + PostgreSQL
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Python – лучший способ создания Enums с иерархией
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Лучший способ создания Enum с иерархией
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Лучший способ создания Enum с иерархией
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»