Страницы

Поиск по вопросам

вторник, 24 декабря 2019 г.

Перегрузка оператора присваивания c#

#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 получающий на вход коллекцию и возвращающий ее копию.

Комментариев нет:

Отправить комментарий