Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ 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.

Автор: klem4 17.04.2008 12:49

Спасибо, будем посмотреть.