#c_sharp
Здравствуйте, на паре форумов прочитал, что перегрузить этот оператор невозможно. Как решить эту проблему? ' { public static void operator = (Person p, Person p1); }` Просто если использовать ArrayList.Colone(), то изменяя новую коллекцию я изменяю и исходную, как это возможно избежать? Спасибо за внимание, подскажите куда копать.
Ответы
Ответ 1
Оператор присваивания, как и некоторые другие действительно нельзя переопределить (см. MSDN). Но если у вас есть доступ к исходникам класса Person, то для решения вашей задачи достаточно унаследовать класс Person от интерфейса IClonable и реализовать этот интерфейс примерно так: public class Person : IClonable { // тут ваши поля и методы public object Clone() { var personClone = new Person(); //тут копируем в новую сущность нужные свойства return personClone; } } После этого вы совершенно спокойно можете копировать элементы, например так: Person p1 = new Person() { //присвоили значения полям } Person p2 = p1.Clone(); В этом случае, p2 получит новую ссылку на свой собственный объект Person. Правда копировать коллекцию придется вручную поэлементно в цикле, т.к. реализованный у стандартных коллекций метод Clone делает неполное копирование и в случае элементов ссылочного типа - копирует ссылки. Но на этот случай можно предусмотреть статический метод в классе Person получающий на вход коллекцию и возвращающий ее копию.
Комментариев нет:
Отправить комментарий