Форум «Всё о Паскале» _ Ада и другие языки _ C# конструкторы классов
Автор: klem4 14.04.2008 0:32
public class Point { private int row; private int col; private char value;
public Point(int row, int col, char value) { this.row = row; this.col = col; this.value = value; }
public Point(Point p) { Point(p.row, p.col, p.value); // можно ли как-то добиться работы такого кода ? } }
Автор: volvo 14.04.2008 0:41
Ничего кроме
public Point(Point p): this(p.row, p.col, p.value) { }
в голову не приходит...
Автор: klem4 14.04.2008 0:46
Отлично, спасибо.
Автор: hardcase 14.04.2008 1:45
А зачем определять у класса конструктор копирования? Для таких вещей лучше использовать интерфейс IClonable и/или метод MemberwiseClone.
Автор: klem4 14.04.2008 12:17
Цитата
А зачем определять у класса конструктор копирования?
Мне кажется удобно, а чем такой метод плох ? И чем лучше клонирование в таком случае ?
Автор: hardcase 14.04.2008 13:41
Цитата(klem4 @ 14.04.2008 9:17)
Мне кажется удобно, а чем такой метод плох ? И чем лучше клонирование в таком случае ?
Если добавить какоето внутреннее поле в класс, то придется вносить дополнительные действия в "конструктор копирования". В этом плане лучше использовать защищенный MemberwiseClone метод - CLR сама скопирует все поля.
Кроме того, с помощью отражения можно написать код, позволяющий относительно безопасно копировать любые объекты (т.е. конструкторы копирования не нужны). http://forum.codenet.ru/showpost.php?p=154925&postcount=14.