Override Clone()
От: i-um  
Дата: 17.08.06 22:52
Оценка:
Пишу свой стиль колонки для DataGridView.
Вот что говорит MSDN:
be sure to override the Clone method to copy the new properties during cloning operations. You should also call the base class's Clone method so that the properties of the base class are copied to the new cell or column.

Вопрос такой: я же буду возвращать объект нового, derived класса. Как мне воспользоваться base Clone(), чтобы скопировать свойства в возвращаемый объект? Или в ручную поназначать их из того, что вернёт base Clone(), но зачем тогда его вообще вызывать?

Что они ввиду-то поимели?
Override Clone()
От: Аноним  
Дата: 17.08.06 23:15
Оценка:
в базовом нутря, недоступные для простых смертных, скопируются, а дальше ты должен будешь докопировать все свои дополнительные свойства.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Override Clone()
От: Аноним  
Дата: 17.08.06 23:15
Оценка:
в базовом нутря, недоступные для простых смертных, скопируются, а дальше ты должен будешь докопировать все свои дополнительные свойства.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Override Clone()
От: i-um  
Дата: 18.08.06 09:54
Оценка:
Здравствуйте, AlexV_555, Вы писали:

AV_>в базовом нутря, недоступные для простых смертных, скопируются, а дальше ты должен будешь докопировать все свои дополнительные свойства.


А как это будет выглядеть? Clone же вернёт объект родительского типа. Typecast его в свой класс?
Киньте пример, пожалуйста, я наверно чего-то в донетовском ООП недопонял.
Re[2]: Override Clone()
От: Nurlan  
Дата: 18.08.06 11:28
Оценка:
Здравствуйте, i-um, Вы писали:

IU>Здравствуйте, AlexV_555, Вы писали:


AV_>>в базовом нутря, недоступные для простых смертных, скопируются, а дальше ты должен будешь докопировать все свои дополнительные свойства.


IU>А как это будет выглядеть? Clone же вернёт объект родительского типа. Typecast его в свой класс?

IU>Киньте пример, пожалуйста, я наверно чего-то в донетовском ООП недопонял.

что то типа:

<Возращаемый тип> Clone(...) {
   base.Clone( ... );
   ...
   _myField = source._myField;
   ...
}
Re: Override Clone()
От: Vector Россия  
Дата: 18.08.06 12:00
Оценка:
Здравствуйте, i-um, Вы писали:

IU>Пишу свой стиль колонки для DataGridView.

IU>Вот что говорит MSDN:
IU>be sure to override the Clone method to copy the new properties during cloning operations. You should also call the base class's Clone method so that the properties of the base class are copied to the new cell or column.
IU>

IU>Вопрос такой: я же буду возвращать объект нового, derived класса. Как мне воспользоваться base Clone(), чтобы скопировать свойства в возвращаемый объект? Или в ручную поназначать их из того, что вернёт base Clone(), но зачем тогда его вообще вызывать?

IU>Что они ввиду-то поимели?


можно сделать MemberwiseClone, а потом, если что-то еще надо, то подправить.
Re[2]: Override Clone()
От: SerkMan  
Дата: 18.08.06 13:03
Оценка:
Здравствуйте, i-um, Вы писали:

IU>Здравствуйте, AlexV_555, Вы писали:


AV_>>в базовом нутря, недоступные для простых смертных, скопируются, а дальше ты должен будешь докопировать все свои дополнительные свойства.


IU>А как это будет выглядеть? Clone же вернёт объект родительского типа. Typecast его в свой класс?

IU>Киньте пример, пожалуйста, я наверно чего-то в донетовском ООП недопонял.

Можно, например так:

public class A : IClonable
{
    public virtual object Clone()
    {
        A a = (A)Activator.CreateInstance(this.GetType());
        ...
    }
}

public class B : A
{
    public override object Clone()
    {
        B b = (B)base.Clone()
        ...
    }
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Override Clone()
От: nikov США http://www.linkedin.com/in/nikov
Дата: 18.08.06 14:08
Оценка:
Здравствуйте, SerkMan, Вы писали:

SM>
SM>        A a = (A)Activator.CreateInstance(this.GetType());
SM>


А почему не так:


        A a = new A();
Re[4]: Override Clone()
От: Lloyd Россия  
Дата: 18.08.06 15:03
Оценка:
Здравствуйте, nikov, Вы писали:

N>А почему не так:


N>
N>        A a = new A();
N>


Потому что, будуи вызван из B::Clone, этот метод вернет экземпляр класса B, а в твоем случае — экземпляр класса A.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Override Clone()
От: nikov США http://www.linkedin.com/in/nikov
Дата: 18.08.06 15:10
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Потому что, будуи вызван из B::Clone, этот метод вернет экземпляр класса B, а в твоем случае — экземпляр класса A.


А, ну да, что-то я сразу не сообразил.
Тогда может быть,

A a = (A)this.MemberwiseClone();
Re[3]: Override Clone()
От: i-um  
Дата: 18.08.06 17:13
Оценка:
SM>

SM>public class B : A
SM>{
SM>    public override object Clone()
SM>    {
SM>        B b = (B)base.Clone()
SM>        ...
SM>    }
SM>}
SM>


Т.е. если после этого сделать b.BField = value, и в A нет поля BField, то всё прокатит?

Я просто недавно на C# с Дельфей перешёл, мне это как-то странно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.