Здравствуйте, на паре форумов прочитал, что перегрузить этот оператор невозможно. Как решить эту проблему? '
{
public static void operator = (Person p, Person p1);
}`
Просто если использовать ArrayList.Colone(), то изменяя новую коллекцию я изменяю и исходную, как это возможно избежать? Спасибо за внимание, подскажите куда копать.
Ответ
Оператор присваивания, как и некоторые другие действительно нельзя переопределить (см. 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 получающий на вход коллекцию и возвращающий ее копию.
Комментариев нет:
Отправить комментарий