Как следует из результата выполнения приведенной выше программы, объект
оЬ2 является копией объекта оЫ, но это совершенно разные объекты. Изменения в одном из них не оказывают никакого влияния на другой. Это достигается конструированием нового объекта типа Test, который выделяет новый объект типа X для копирования. При этом новому экземпляру объекта типа X присваивается такое же значение, как и у объекта типа X в оригинале.Для
получения неполной копии достаточно вызвать методMemberwiseClone ,определяемый в классеObjectиз методаClone . В качестве упражнения попробуйте заменить методClone в предыдущем примере программы на следующий его вариант.// Сделать неполную копию вызывающего объекта, public object Clone {
Test temp = (Test) MemberwiseClone; return temp;
}
После этого изменения результат выполнения данной программы будет выглядеть следующим образом.
Значения объекта obi: о.а: 10, Ь: 20 Сделать объект оЬ2 копией объекта оЫ.
Значения объекта оЬ2: о.а: 10, Ь: 20
Изменить значение obi.о.а на 99, а значение obl.b — на 88.
Значения объекта obi: о.а: 99, Ь: 88 Значения объекта оЬ2: о.а: 99, Ь: 20
Как видите, обе переменные экземпляра
ов объектахоЫиоЬ2ссылаются на один и тот же объект типа X. Поэтому изменения в одном объекте оказывают влияние на другой. Но в то же время поляbтипаintв каждом из них разделены, поскольку типы значений недоступны по ссылке.Интерфейсы I Forma tProvider и I Format table
В интерфейсе
I Forma tProviderопределен единственный методGet Format , который возвращает объект, определяющий форматирование данных в удобочитаемой форме текстовой строки. Ниже приведена общая форма методаGet Format:object GetFormat(Type
где
Интерфейс
I Format tableподдерживает форматирование выводимых результатов в удобочитаемой форме. В нем определен следующий метод:string ToString(string
где
ПРИМЕЧАНИЕ
Подробнее о форматировании речь пойдет в главе 22.
Интерфейсы IObservable