Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 17
1

Глубокое копирование объектов с интерфейсами

13.05.2016, 21:07. Показов 3341. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста, если класс наследует интерфейсы, то как реализовать его глубокое копирование. Проблема в том что в интерфейсах не именно методы, а св-ва с сохраненной информацией
C#
1
2
3
4
public interface IWeapon 
{
    System.Int32 Attack { get; }
}
C#
1
2
3
public class Weapon : ItemObject, IWeapon
{
}
А копирую я вообще ItemObject
C#
1
2
List<ItemObject> t;
var i = t[2];  <---вот здесь
и потом в редакторе вывожу инфу о нем
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2016, 21:07
Ответы с готовыми решениями:

копирование объектов
Подскажите,пожалуйста, как мне сделать копию объекта. Имеем obj1, хочу сделать obj2==obj1 при...

Копирование объектов по значению
Знаю, тема уже заезженная Но то ли у меня голова совсем уже не варит, то ли это действительно...

Пытаюсь разобраться с интерфейсами
Не въеду всё никак как работать с интерфейсами. Вот помогите пожалуйста на примере понять как это...

Непонятно задание с интерфейсами
1. Создайте массив объектов класса Нет в. Реализуйте интерфейс IComparable для сравнения товаров по...

2
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
13.05.2016, 21:43 2
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
public static class ObjectExtension
{
    public static object CloneObject(this object objSource)
    {
        //Get the type of source object and create a new instance of that type
        Type typeSource = objSource.GetType();
        object objTarget = Activator.CreateInstance(typeSource);
 
        //Get all the properties of source object type
        PropertyInfo[] propertyInfo = typeSource.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
 
        //Assign all source property to taget object 's properties
        foreach (PropertyInfo property in propertyInfo)
        {
            //Check whether property can be written to
            if (property.CanWrite)
            {
                //check whether property type is value type, enum or string type
                if (property.PropertyType.IsValueType || property.PropertyType.IsEnum || property.PropertyType.Equals(typeof(System.String)))
                {
                    property.SetValue(objTarget, property.GetValue(objSource, null), null);
                }
                //else property type is object/complex types, so need to recursively call this method until the end of the tree is reached
                else
                {
                    object objPropertyValue = property.GetValue(objSource, null);
                    if (objPropertyValue == null)
                    {
                        property.SetValue(objTarget, null, null);
                    }
                    else
                    {
                        property.SetValue(objTarget, objPropertyValue.CloneObject(), null);
                    }
                }
            }
        }
        return objTarget;
    }
}
http://www.c-sharpcorner.com/U... n-C-Sharp/

Добавлено через 3 минуты
Цитата Сообщение от Avadd Посмотреть сообщение
если класс наследует интерфейсы
Классы не наследуют интерфейсы, классы реализуют интерфейсы. То же самое относится к структурам.

Цитата Сообщение от Avadd Посмотреть сообщение
Проблема в том что в интерфейсах не именно методы, а св-ва с сохраненной информацией
В интерфейсах информация не хранится. Интерфейс - публичный контракт класса/структуры. В классах/структурах реализуются члены интерфейса. Информация хранится в экземплярах типов.
1
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 17
14.05.2016, 11:04  [ТС] 3
Спасибо, интересная статья, второй способ особенно. В моем случае (Unity3d, Sprite свойство в классе) первый способ не прокатил, второй оказался черезчур избыточным, поэтому пошел другим путем
А проблемы с терминологией у меня вечные, я даже имена коллег путаю
0
14.05.2016, 11:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2016, 11:04
Помогаю со студенческими работами здесь

Как выполнять глубокое копирование объектов?
Вообщем возникла проблема при копирование объектов. Перешёл с С++ на питон. Появилась необходимость...

Глубокое копирование
Суть проста. Нужно скопировать массив ,включая вложенные массивы и объекты. Реализовать то...

Глубокое клонирование объектов не работает
Всем привет. Я на этапе обучения, дошел вот до темы с объектами, увидел пример с клонированием, и...

Глубокое копирование пользовательского элемента управления
Здравствуйте! Ну вопрос практически описан в шапке. Есть пользовательский контрол. Надо сделать...


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

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