Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 122

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 116 117 118 119 120 121 < 122 > 123 124 125 126 127 128 .. 404 >> Следующая


В типах ClassA, ClassB И MyStruct реаЛИЗОВЭН интерфейс IMylnterface, поэтому все онн совместимы с типом IMylnterface, Класс ciassD наследуется от класса ciassA, поэтому он также является совместимым. Следовательно, несовместимым С ТИПОМ IMylnterface оказывается ТОЛЬКО ClassC.

Наконец, только переменные собственно типа MyStruct н переменные, полученные в результате упаковки этого типа, оказываются совместимыми с MyStruct, поскольку возможности преобразовывать ссылочные типы в значимые типы не существует (за исключением того, что мы можем выполнить процедуру распаковки для тех переменных, для которых ранее была выполнена процедура упаковки).

'*‘ CJ'ib-gCShArpi.Ch.^-M-1J '¦,№ VВ1 иО J\fi«i^jOcbugj.UiLI

jiy-: '¦ n-rj r.l.i й LVl1'' ,J-11 ¦ I* I»' -Urti iirhiJe I.'.in I: ¦ Гуну i'Cbk*. I J . -||r

JgLal

ll.n- Ul.lf L

с

f) ¦><>¦ I 4.' I Cl ‘J

U.-u-i.i’ilc c U.iri.il»]*.- «-•

U.tri.ihio Г flno I V.! i(l‘J

U-n-iM.l..:

U <

U.O'i.ibli' с

¦ I 11 I mciM-v I'l i. i Ff u;-f >¦Ljvf -I LI .

n't i«t! unnvU.rL ^rt «LG ГТчУLl'irc^ T

1.1'; ::!• f 'jjH‘ U-M* i .*1» ] < i i>* К ly /. u Г;1л-г-;П.

n V: i’']iiyr rl.!*') r.г» Irt'^I fifr i4‘.ir r-.

l|Jf 1у I.MIPJi’J'f .¦ ll I 1.1 гиг с .

i-t'-.f; f-vin: y.iri-iMf-li'! lw гнщу.-I'l.iiil tn

о'1, b‘‘ On IM1 ntierfiicr

n't In’ i’l f т u !i i/М», rii i'l .

1 .f.:. D' Г yji ¦J.n i-ili 3t n j;-: I uiM.ii.'rl.1 il Id l. l.L '.fi .

il J.i1 ¦ iJ'jIiMl’ i'Lul 1.0 I Hvllltcrf -ini1 .

h 1 t Id*: i:ciiLVrrLf^l Ms Г!'/jt гмг i; ..

rtn.ilv- I nil HyK^ruct tvpc v.ii'i.Oilr:

Ул1Ч*тЫ<: curi'i Irf1 cinrscrtcA Lu Cl.i"r.fi.

г.,in hn • cenwprtrd tn 1 Ms1 [ Г|1.с*Т.чс:с .

Ll.it-i.iMt: Ci>n hit roriHji’Htrd t.i f1vytrm:i .

ftn.ily.'t io*f M^Lrnct t-Vju- vai1 i,\Mi*:

U'U'i'iMc imii'I hi:. cnngc}4ci1 Lo

U.tri.iTiJr iMfi 1.*' fil tin i Лv! иt• • гГлсi .

U.tp Il'Ji Jl’ J.i- cnnui’i'ficrl lo Rl/St J'fif.t »

Гпг.¦: .iny Lti Cunt imir

Lit

J7

v[

Ал
258

Глава 11

Оператор as

Оператор аз осуществляет преобразование типа в заданный ссылочный тип с помощью следующего синтаксиса:

<оггерлвд> ав <тшт>

Использование этой возможности допускается только при наличии определенных обстоятельств:

? Если <операнд> имеет тип <тип>,

? Еслн <олераад> может быть неявно преобразован в fHn <тип>.

? Еслн <оперлнд> может быть преобразован в тип <тип>

¦ в результате процедуры упаковки.

Еслн <оперлнд> может быть преобразован в <тип> явным образом, то результатом вычисления этого выражения будет null. Например, в предыдущей программе сущестпует возможность явного преобразования между типами ClassA и ciassD, который наследуется от класса ClassA, В результате выполнения следующего кода:

ClassA objl » пен ClassA[);

ClaeeD objl * objl as CiassD j

obj2 будет присвоен null.

Однако еслн переменная т ша ClassA содержит экземпляр переменной типа ciaseD, то этот оператор будет работать:

ClaesD objl * new ClaesDО ;

ClassA obj2 = objl;

CiassD obj] * obj2 as CiassD; ¦

В данном случае в переменной obj3 вместо null будет содержаться ссылка на тот же самый объект, что и в переменной objl.

Это делает оператор as очень полезным, поскольку выполнение следующего кода приведет к возникновению исключительной ситуации:

ClassA objl = нем ClassA() j ¦

CiassD obj2 « (ClaeeD)objlg

А вот выполнение аналогичного кода с использованием оператора as приведет к тому, что переменной оЬэ^будет просто присвоено значение null. Вследствие этого код, аналогичный приведенному ннже (в нем используются два класса, созданных иами ранее: класс Animal и класс cow, производный от класса Animal), является совершенно обычным для приложений на С#:

public void KilkCow(Animal myAnimal) i .

{

Сон myCow ° Animal as Cow;

if (вдСон )» Dull)

I

myCow, Milk () i

)

else

(

Сол ale.WriteHne(*{0) не является коровой и не ио»ет роиться.', щу Animal.Name);

}

>

Это оказывается намного проще, чем осуществлять проверку на предмет возникновения исключительных ситуаций!
Дополнительные сведения о классах

259

Глубокое копирование

В главе 9 рассказывалось о неглубоком копировании с помощью защищенного метода System.Object.MemberwiseClone<), например, следующим способом:

- ' public class Cloner . •

(

public int Vali .

public Cloner (int newVal)

( <

Val ¦ neHVali

)

public object GetCopy()

?

return MewberwiaeCloneO ;

}

^I

Предположим, однако, что у нас имеются поля, которые представляют собой ссылочные, а не значимые типы (например объекты):

public class Content

<

public int Val» ¦

)

public class Cloner

- - ( ..........................................ц ________________________________________

public Content HyContent « new Content () t , public Cloner(int newVal)

MyContent. Val =¦ neWVal j .

)

public object GetCopy()

(

return MemberwiseClone();

)

)

В данном случае неглубокая копия будет создана, однако у Getcopyо будет иметься поле, которое ссылается на тот же самый объект, на который ссылается копируемый объект.
Предыдущая << 1 .. 116 117 118 119 120 121 < 122 > 123 124 125 126 127 128 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.