Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
122 / 122 / 12
Регистрация: 12.06.2010
Сообщений: 499
Записей в блоге: 2
1

Как клонировать класс?

26.06.2018, 17:45. Показов 1729. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо создать копию данного класса в новый экземляр, чтобы потом поместить его в коллекцию для дальнейшей с ним работы. Каким образом это можно сделать? Пробовал несколько способов, но либо я не до конца понял как использовать ICloneable, либо руки мои не из плеч. Так или иначе копия не создается, при добавлении класса в коллекции все имеющиеся классы принимают его значения.
Сам класс
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
    /// <summary>
    /// Класс содержащий в себе всю информацию о конкретном ПК
    /// </summary>   
    public class PComputer 
    {
        private static string _unicID = string.Empty;
        private static string _Name = string.Empty;
        private static Uptime _upTime = new Uptime();
        private static HardWareInfo _hwInfo = new HardWareInfo();
        private static OsInfo _OSinfo = new OsInfo();
        private static Peripherals _periph = new Peripherals();      
       
        /// <summary>
        /// Информация об операционной системе
        /// </summary>
        public OsInfo OSinfo { get => _OSinfo; set => _OSinfo = value; }
        /// <summary>
        /// Информация о периферии
        /// </summary>
        public Peripherals Periph { get => _periph; set => _periph = value; }
 
        /// <summary>
        /// Информация о железе
        /// </summary>
        public HardWareInfo HwInfo { get => _hwInfo; set => _hwInfo = value; }
 
        /// <summary>
        /// Время работы ПК
        /// </summary>
        public Uptime UpTime { get => _upTime; set => _upTime = value; }
 
        /// <summary>
        /// Имя ПК
        /// </summary>
        public string Name { get => _Name; set => _Name = value; }
 
        /// <summary>
        /// Уникальный id ПК
        /// </summary>
        public string UnicID { get => _unicID; set => _unicID = value; }
 
        /// <summary>
        /// Дефолтный конструктор
        /// </summary>
        //public PComputer()
        //{
        //    UnicID = string.Empty;
        //    Name = string.Empty;
        //    UpTime = new Uptime();
        //    HwInfo = new HardWareInfo();
        //    OSinfo = new OsInfo();
        //    Periph = new Peripherals();
        //}
 
    }


Коллекция куда все это нужно запихнуть
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
   /// <summary>
    /// Класс для обработки информации о каждом компьютере в коллекции
    /// </summary>
    public static class PCinfo
    {
        private static List<PComputer> _pcList = new List<PComputer>();
       
        public static void Add(PComputer _pc)
        {           
            _pcList.Add(_pc);
        }       
 
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.06.2018, 17:45
Ответы с готовыми решениями:

Как клонировать класс Chart
Как клонировать класс Chart, если в нём нету интерфейса ICloneable?

Как правильно передавать параметры из класса А в класс С через класс B?
Всем привет! Пишу игру - Морской бой! Есть класс Game. Также есть класс Battlefield (модель поля,...

Как переопределить класс integer в свой класс ('целочисленный')?
как переопредельть класс Int32 в свой класс ('целочисленный') я писал: class целочисленный :...

Как создать класс из ссылки на класс?
Исходные данные: Имеется произвольный набор производных классов от MyClass: class MyClass1 :...

5
653 / 589 / 171
Регистрация: 17.07.2012
Сообщений: 1,670
Записей в блоге: 1
26.06.2018, 17:57 2
Цитата Сообщение от Pe4eNEG Посмотреть сообщение
Так или иначе копия не создается, при добавлении класса в коллекции все имеющиеся классы принимают его значения.
Боюсь, вам это не поможет. Статик члены, даже у всех копий, будут иметь одни и те же данные. А почему они у вас static?
0
122 / 122 / 12
Регистрация: 12.06.2010
Сообщений: 499
Записей в блоге: 2
26.06.2018, 17:59  [ТС] 3
Цитата Сообщение от Cupko Посмотреть сообщение
Боюсь, вам это не поможет. Статик члены, даже у всех копий, будут иметь одни и те же данные. А почему они у вас static?
Осталось после "экспериментов". Как вообще можно поступить во моей ситуации?
0
653 / 589 / 171
Регистрация: 17.07.2012
Сообщений: 1,670
Записей в блоге: 1
26.06.2018, 18:01 4
Лучший ответ Сообщение было отмечено Pe4eNEG как решение

Решение

Цитата Сообщение от Pe4eNEG Посмотреть сообщение
Осталось после "экспериментов". Как вообще можно поступить во моей ситуации?
Убрать static?
Повторюсь, все static члены будут ссылаться на одни и те же объекты во всех экземплярах. Уберете статик - каждый экземпляр будет иметь свои данные.
1
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,344
Записей в блоге: 1
26.06.2018, 18:16 5
Лучший ответ Сообщение было отмечено Pe4eNEG как решение

Решение

Pe4eNEG, как исправитт ошибку уже пояснили - нужно убрать static. В дополнение к этому советую упростить объявление класса
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/// <summary>
/// Класс содержащий в себе всю информацию о конкретном ПК
/// </summary>   
public class PComputer 
{
    /// <summary>
    /// Информация об операционной системе
    /// </summary>
    public OsInfo OSinfo { get; set; } = new OsInfo();
 
    /// <summary>
    /// Информация о периферии
    /// </summary>
    public Peripherals Periph { get; set; } = new Peripherals();
 
    /// <summary>
    /// Информация о железе
    /// </summary>
    public HardWareInfo HwInfo { get; set; } = new HardWareInfo();
 
    /// <summary>
    /// Время работы ПК
    /// </summary>
    public Uptime UpTime { get; set; } = new Uptime();
 
    /// <summary>
    /// Имя ПК
    /// </summary>
    public string Name { get; set; } = "";
 
    /// <summary>
    /// Уникальный id ПК
    /// </summary>
    public string UnicID { get; set; } = "";
}
1
122 / 122 / 12
Регистрация: 12.06.2010
Сообщений: 499
Записей в блоге: 2
26.06.2018, 18:56  [ТС] 6
Спасибо! Первый раз прочитал и не заметил.
0
26.06.2018, 18:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2018, 18:56
Помогаю со студенческими работами здесь

Как клонировать класс
Имеется класс public class ClassA implement Cloneable{ public ClassH h; public ClassN n; ...

Как клонировать матрицы?
Предложите систему клонирования матриц, размерность и диапазон указывается пользователем

Как клонировать кнопку?
всем привет,скажите как в windows forms сделать так что бы ,ну вот допустим у меня есть кнопка...

Как клонировать систему?
Здравствуйте уважаемые сатанисты (шучу) Имеется ~ 60 компьютеров с не схожим железом. Отличаются...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru