Страница 119

Я знаю C#, C Sharp

Главная
Страница 1
Страница 2
Страница 3
Страница 4
Страница 5
Страница 6
Страница 7
Страница 8
Страница 9
Страница 10
Страница 11
Страница 12
Страница 13
Страница 14
Страница 15
Страница 16
Страница 17
Страница 18
Страница 19
Страница 20
Страница 21
Страница 22
Страница 23
Страница 24
Страница 25
Страница 26
Страница 27
Страница 28
Страница 29
Страница 30
Страница 31
Страница 32
Страница 33
Страница 34
Страница 35
Страница 36
Страница 37
Страница 38
Страница 39
Страница 40
Страница 41
Страница 42
Страница 43
Страница 44
Страница 45
Страница 46
Страница 47
Страница 48
Страница 49
Страница 50
Страница 51
Страница 52
Страница 53
Страница 54
Страница 55
Страница 56
Страница 57
Страница 58
Страница 59
Страница 60
Страница 61
Страница 62
Страница 63
Страница 64
Страница 65
Страница 66
Страница 67
Страница 68
Страница 69
Страница 70
Страница 71
Страница 72
Страница 73
Страница 74
Страница 75
Страница 76
Страница 77
Страница 78
Страница 79
Страница 80
Страница 81
Страница 82
Страница 83
Страница 84
Страница 85
Страница 86
Страница 87
Страница 88
Страница 89
Страница 90
Страница 91
Страница 92
Страница 93
Страница 94
Страница 95
Страница 96
Страница 97
Страница 98
Страница 99
Страница 100
Страница 101
Страница 102
Страница 103
Страница 104
Страница 105
Страница 106
Страница 107
Страница 108
Страница 109
Страница 110
Страница 111
Страница 112
Страница 113
Страница 114
Страница 115
Страница 116
Страница 117
Страница 118
Страница 119
Страница 120
Страница 121
Страница 122
Страница 123
Страница 124
Страница 125
Страница 126
Страница 127
Страница 128
Страница 129
Страница 130
Страница 131
Страница 132
Страница 133
Страница 134
Страница 135
Страница 136
Страница 137
Страница 138
Страница 139
Страница 140
Страница 141
Страница 142
Страница 143
Страница 144
Страница 145
Страница 146
Страница 147
Страница 148
Страница 149
Страница 150
Страница 151
Страница 152
Страница 153
Страница 154
Страница 155
Страница 156
Страница 157
Страница 158
Страница 159
Страница 160
Страница 161
Страница 162
Страница 163
Страница 164
Страница 165
Страница 166
Страница 167
Страница 168
Страница 169
Страница 170
Страница 171
Страница 172
Страница 173
Страница 174
Страница 175
Страница 176
Страница 177
Страница 178
Страница 179
Страница 180
Страница 181
Страница 182
Страница 183
Страница 184
Страница 185
Страница 186
Страница 187
Страница 188
Страница 189
Страница 190
Страница 191
Страница 192
Страница 193
Страница 194
Страница 195
Страница 196
Страница 197
Страница 198
Страница 199
Страница 200
Страница 201
Страница 202
Страница 203
Страница 204
Страница 205
Страница 206
Страница 207
Страница 208
Страница 209
Страница 210
Страница 211
Страница 212
Страница 213
Страница 214
Страница 215
Страница 216
Страница 217
Страница 218
Страница 219
Страница 220
Страница 221
Страница 222
Страница 223
Страница 224
Страница 225
Страница 226
Страница 227
Страница 228
Страница 229
Страница 230
Страница 231
Страница 232
Страница 233
Страница 234
Страница 235
Страница 236
Страница 237
Страница 238
Страница 239
Страница 240
Страница 241
Страница 242
Страница 243
Страница 244
Страница 245
Страница 246
Страница 247
Страница 248
Страница 249
Страница 250
Страница 251
Страница 252
Страница 253
Страница 254
Страница 255
Страница 256
Страница 257
Страница 258
Страница 259
Страница 260
Страница 261
Страница 262
Страница 263
Страница 264
Страница 265
Страница 266
Страница 267
Страница 268
Страница 269
Страница 270
Страница 271
Страница 272
Страница 273
Страница 274
Страница 275
Страница 276
Страница 277
Страница 278
Страница 279
Страница 280
Страница 281
Страница 282
Страница 283
Страница 284
Страница 285
Страница 286
Страница 287
Страница 288
Страница 289
Страница 290
Страница 291
Страница 292
Страница 293
Страница 294
Страница 295
Страница 296
Страница 297
Страница 298
Страница 299
Страница 300
Страница 301
Страница 302
Страница 303
Страница 304
Страница 305
Страница 306
Страница 307
Страница 308
Страница 309
Страница 310
Страница 311
Страница 312
Страница 313
Страница 314
Страница 315
Страница 316
Страница 317
Страница 318
Страница 319
Страница 320
Страница 321
Страница 322
Страница 323
Страница 324
Страница 325
Страница 326
Страница 327
Страница 328
Страница 329
Страница 330
Страница 331
Страница 332
Страница 333
Страница 334
Страница 335
Страница 336
Страница 337
Страница 338
Страница 339
Страница 340
Страница 341
Страница 342
Страница 343
Страница 344
Страница 345
Страница 346
Страница 347
Страница 348
Страница 349
Страница 350
Страница 351
Страница 352
Страница 353
Страница 354
Страница 355
Страница 356
Страница 357
Страница 358
Страница 359
Страница 360
Страница 361
Страница 362
Страница 363
Страница 364
Страница 365
Страница 366
Страница 367
Страница 368
Страница 369
Страница 370
Страница 371
Страница 372
Страница 373
Страница 374
Страница 375
Страница 376
Страница 377
Страница 378
Страница 379
Страница 380
Страница 381
Страница 382
Страница 383
Страница 384
Страница 385
Страница 386
Страница 387
Страница 388
Страница 389
Страница 390
Страница 391
Страница 392
Страница 393
Страница 394
Страница 395
Страница 396
Страница 397
Страница 398
Страница 399
Страница 400
Страница 401
Страница 402
Страница 403
Страница 404
Страница 405
Страница 406
Страница 407
Страница 408
Страница 409
Страница 410
Страница 411
Страница 412
Страница 413
Страница 414
Страница 415
Страница 416
Страница 417
Страница 418
Страница 419
Страница 420
Страница 421
Страница 422
Страница 423
Страница 424
Страница 425
Страница 426
Страница 427
Страница 428
Страница 429
Страница 430
Страница 431
Страница 432
Страница 433
Страница 434
Страница 435
Страница 436
Страница 437
Страница 438
Страница 439
Страница 440
Страница 441
Страница 442
Страница 443
Страница 444
Страница 445
Страница 446
Страница 447
Страница 448
Страница 449
Страница 450
Страница 451
Страница 452
Страница 453
Страница 454
Страница 455
Страница 456
Страница 457
Страница 458
Страница 459
Страница 460
Страница 461
Страница 462
Страница 463
Страница 464
Страница 465
Страница 466
Страница 467
Страница 468
Страница 469
Страница 470
Страница 471
Страница 472
Страница 473
Страница 474
Страница 475
Страница 476
Страница 477
Страница 478
Страница 479
Страница 480
Страница 481
Страница 482
Страница 483
Страница 484
Страница 485
Страница 486
Страница 487
Страница 488
Страница 489
Страница 490
Страница 491
Страница 492
Страница 493
Страница 494
Страница 495
Страница 496
Страница 497
Страница 498
Страница 499
Страница 500
Страница 501
Страница 502
Страница 503
Страница 504
Страница 505
Страница 506
Страница 507
Страница 508








Гостевая книга

Форум

Скачать учебник
Предыдущая страница
Следующая страница
, ставятся в соответствие все оставшиеся фактические аргументы (соответствие по порядку). Если формальный аргумент объявлен с ключевым словом ref или out, то фактический аргумент должен сопровождаться таким же ключевым словом в точке вызова (соответствие по статусу).

Появление ключевых слов при вызове методов - это особенность языка C#, отличающая его от большинства других языков. Такой синтаксис следует приветствовать, поскольку он направлен на повышение надежности программной системы, напоминая программисту о том, что данный фактический аргумент является выходным и значение его наверняка изменится после вызова метода. Однако из-за непривычности синтаксиса при вызове методов эти слова часто забывают писать, что приводит к появлению синтаксических ошибок.

Если формальный аргумент объявлен с типом T, то выражение, задающее фактический аргумент, должно быть согласовано по типу с типом T: допускает преобразование к типу T, совпадает c типом T или является его потомком (соответствие по типу).

Если формальный аргумент является выходным - объявлен с ключевым словом ref или out, - то соответствующий фактический аргумент не может быть выражением, поскольку используется в левой части оператора присваивания; следовательно, он должен быть именем, которому можно присвоить значение.

Вызов метода. Семантика

Что происходит в момент вызова метода? Выполнение начинается с вычисления фактических аргументов, которые, как мы знаем, являются выражениями. Вычисление этих выражений может приводить, в свою очередь, к вызову других методов, так что этот первый этап может быть довольно сложным и требовать больших временных затрат. В чисто функциональном программировании все вычисление по программе сводится к вызову одной функции, фактическими аргументами которой являются вызовы функций и так далее и так далее.

Для простоты понимания семантики вызова можно полагать, что в точке вызова создается блок, соответствующий телу метода (в реальности все значительно эффективнее). В этом блоке происходит замена имен формальных аргументов фактическими аргументами. Для выходных аргументов, для которых фактические аргументы также являются именами, эта замена или передача аргументов осуществляется по ссылке, то есть заменяет формальный аргумент ссылкой на реально существующий объект, заданный фактическим аргументом. Чуть более сложную семантику имеет вызов по значению, применяемый к формальным аргументам, которые объявлены без ключевых слов ref и out. При вычислении выражений, заданных такими фактическими аргументами, их значения присваиваются специально создаваемым переменным, локализованным в теле исполняемого блока. Имена этих локализованных переменных и подставляются вместо имен формальных аргументов. Понятно, что тип локализованных переменных определяется типом соответствующего формального аргумента. Понятно также, что семантика замены формальных аргументов фактическими - это, по сути, семантика оператора присваивания.

Семантика присваивания рассматривалась в лекциях 3, 6 и 7.

Каково следствие семантики вызова по значению? Если вы забыли указать ключевое слово ref или out для аргумента, фактически являющегося выходным, то к нему будет применяться вызов по значению. Даже если в теле метода происходит изменение значения этого аргумента, то оно действует только на время выполнения тела метода. Как только метод заканчивает свою работу (завершается блок), все локальные переменные (в том числе, созданные для замены формальных аргументов) оканчивают свое существование, так что изменения не затронут фактических аргументов и они сохранят свои значения, бывшие у них до вызова. Отсюда вывод: все выходные аргументы, значения которых предполагается изменить в процессе работы, должны иметь ключевое слово ref или out. Еще один важный вывод: ключевым словом ref полезно иногда снабжать и входные аргументы. Если известно, что фактический аргумент будет всегда представлен именем, а не сложным выражением, то в целях экономии памяти разумно для таких аргументов применять семантику вызова по ссылке. В этом случае не будет создаваться копия аргумента - это экономит память и время, что может быть важно при работе со сложными структурами.

Говоря о семантике вызова по ссылке и по значению, следует сделать одно важное уточнение. В объектном программировании, каковым является и программирование на C#, основную роль играют ссылочные типы - мы работаем с классами и объектами. Когда методу передается объект ссылочного типа, то все поля этого объекта могут меняться в методе самым беззастенчивым образом. И это несмотря на то, что объект формально не является выходным, не имеет ключевых слов ref или out, использует семантику вызова по значению. Сама ссылка на объект, как и положено, остается неизменной, но состояние объекта, его поля могут полностью обновиться. Такая ситуация типична и представляет один из основных способов изменения состояния объектов. Именно поэтому ref

Предыдущая страница
Следующая страница
Hosted by uCoz