C#与.NET 3.0 高级程序设计(英文版)
Bagian 1 nnn Memperkenalkan C# dan Platform .NET
nBAB 1 Filsafat .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Memahami Keadaan Sebelumnya. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Solusi .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Memperkenalkan Blok Bangunan Platform .NET (CLR, CTS,
dan CLS). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Bahasa Pemrograman .NET-Aware Tambahan. . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Ikhtisar Majelis .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Memahami Sistem Tipe Umum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Memahami Spesifikasi Bahasa Umum. . . . . . . . . . . . . . . . . . . . . . 20
Memahami Runtime Bahasa Umum. . . . . . . . . . . . . . . . . . . . . . . . . . 22
Perbedaan Majelis/Ruang Nama/Jenis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Menjelajahi Majelis Menggunakan ildasm.exe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Menjelajahi Majelis Menggunakan Reflektor Lutz Roeder. . . . . . . . . . . . . . . . . . . . . . 31
Menyebarkan Waktu Proses .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Sifat Platform-Independen dari .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
nBAB 2 Membangun Aplikasi C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Peran SDK .NET Framework 3.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Membangun Aplikasi C# Menggunakan csc.exe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Membangun Aplikasi .NET Menggunakan TextPad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Membangun Aplikasi .NET Menggunakan Notepad++. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Membangun Aplikasi .NET Menggunakan SharpDevelop. . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Membangun Aplikasi .NET Menggunakan Visual C# 2008 Express . . . . . . . . . . . . . . . . . . 50
Membangun Aplikasi .NET Menggunakan Visual Studio 2008. . . . . . . . . . . . . . . . . . . . . . 52
Katalog Sebagian Alat Pengembangan .NET Tambahan. . . . . . . . . . . . . . . . . . . . 64
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
iv
Bagian 2 nnn Konstruksi Pemrograman Inti C#
nBAB 3 Konstruksi Pemrograman Inti C#, Bagian I. . . . . . . . . . . . . . . . . . . . . . . . . 69
Anatomi Program C# Sederhana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Selain Yang Menarik: Beberapa Anggota Tambahan
Sistem.Kelas Lingkungan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Kelas System.Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Tipe Data Sistem dan Notasi Singkatan C#. . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Memahami Tipe System.String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Mempersempit dan Memperluas Konversi Tipe Data. . . . . . . . . . . . . . . . . . . . . . . . . . 95
Konstruksi Iterasi C#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Konstruksi Keputusan dan Operator Relasional/Kesetaraan. . . . . . . . . . . . . . . . . 102
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
nBAB 4 Konstruksi Pemrograman Inti C#, Bagian II . . . . . . . . . . . . . . . . . . . . . . . . 107
Metode dan Pengubah Parameter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Pengertian Member Overloading. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Manipulasi Array di C#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Memahami Tipe Enum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Memahami Jenis Struktur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Memahami Tipe Nilai dan Tipe Referensi. . . . . . . . . . . . . . . . . . . . . . . . 129
Jenis Nilai dan Referensi: Detail Akhir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Memahami Tipe C# Nullable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
nBAB 5 Mendefinisikan Tipe Kelas Terenkapsulasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Memperkenalkan Tipe Kelas C#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Memahami Konstruktor Kelas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Peran Kata Kunci ini. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Memahami Kata Kunci statis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Mendefinisikan Pilar OOP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
C# Pengubah Akses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Pilar Pertama: Layanan Enkapsulasi C#. . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Memahami Data Konstan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Memahami Bidang Read-Only. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Memahami Tipe Parsial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Mendokumentasikan Kode Sumber C# melalui XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Memvisualisasikan Hasil Kerja Kami. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
nBAB 6 Pengertian Warisan dan Polimorfisme. . . . . . . . . . . . . . . . . . 185
Mekanisme Dasar Warisan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Merevisi Diagram Kelas Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Pilar Kedua: Rincian Warisan. . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Pemrograman untuk Penahanan/Delegasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
nISI v
vi nISI
Pilar Ketiga: Dukungan Polimorfik C#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Memahami Aturan Pengecoran Kelas Dasar/Kelas Turunan. . . . . . . . . . . . . . . . . . . 210
Kelas Induk Master: System.Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
nBAB 7 Memahami Penanganan Pengecualian Terstruktur. . . . . . . . . . . . . . . . . . . 219
Syair untuk Kesalahan, Bug, dan Pengecualian. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Peran Penanganan Pengecualian .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Contoh yang Paling Sederhana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Mengonfigurasi Status Pengecualian. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Pengecualian Tingkat Sistem (System.SystemException) . . . . . . . . . . . . . . . . . . . . . 230
Pengecualian Tingkat Aplikasi (System.ApplicationException) . . . . . . . . . . . . . . . 231
Memproses Banyak Pengecualian. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Blok Akhirnya. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Siapa yang Melempar Apa? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Akibat dari Pengecualian yang Tidak Tertangani. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Men-debug Pengecualian yang Tidak Tertangani Menggunakan Visual Studio. . . . . . . . . . . . . . . . . . . . 242
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
nBAB 8 Pengertian Object Seumur Hidup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Kelas, Objek, dan Referensi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Dasar-dasar Seumur Hidup Objek. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Peran Akar Aplikasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Memahami Generasi Objek. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Tipe Sistem.GC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Membangun Objek yang Dapat Difinalisasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Membangun Benda Sekali Pakai. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Jenis Bangunan yang Dapat Difinalisasi dan Sekali Pakai. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Bagian 3 nnn Konstruksi Pemrograman C# Tingkat Lanjut
nBAB 9 Bekerja dengan Antarmuka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Memahami Jenis Antarmuka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Mendefinisikan Antarmuka Kustom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Menerapkan Antarmuka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Memanggil Anggota Antarmuka di Tingkat Objek. . . . . . . . . . . . . . . . . . . . . . . . . 276
Antarmuka Sebagai Parameter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Antarmuka Sebagai Nilai Pengembalian. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Array Jenis Antarmuka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Implementasi Antarmuka Menggunakan Visual Studio 2008 . . . . . . . . . . . . . . . . . . . . . . . 282
Menyelesaikan Bentrokan Nama melalui Implementasi Antarmuka Eksplisit. . . . . . . . . . . . . 283
Merancang Hierarki Antarmuka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Membangun Tipe Enumerable (IEnumerable dan IEnumerator) . . . . . . . . . . . . . . . 289
Membangun Objek yang Dapat Dikloning (ICloneable). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Membangun Objek Sebanding (IComparable). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Memahami Antarmuka Panggilan Balik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
nBAB 10 Koleksi dan Generik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Antarmuka System.Collections Namespace . . . . . . . . . . . . . . . . . . . . . 309
Jenis Kelas System.Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Sistem.Koleksi.Ruang Nama Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Hubungan Boxing, Unboxing, dan System.Object. . . . . . . . . . . . . . . . . . . 316
Masalah Keamanan Jenis dan Koleksi yang Diketik dengan Kuat. . . . . . . . . . . . . . . . . . 319
System.Collections.Namespace Generik . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Membuat Metode Generik Kustom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Membuat Struktur dan Kelas Generik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Membuat Koleksi Generik Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Membuat Kelas Dasar Generik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Membuat Antarmuka Generik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
nBAB 11 Delegasi, Acara, dan Lambda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Memahami Tipe Delegasi .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Mendefinisikan Delegasi di C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Kelas Dasar System.MulticastDelegate dan System.Delegate . . . . . . . . . 344
Contoh Delegasi yang Paling Sederhana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Perkuatan Jenis Mobil dengan Delegasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
Contoh Delegasi yang Lebih Rumit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Memahami Kovariansi Delegasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Menciptakan Delegasi Generik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Memahami Acara C#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Delegasi EventHandler Generik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Memahami Metode C# Anonim. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Memahami Metode Konversi Grup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Operator Lambda C# 2008. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
nBAB 12 Pengindeks, Operator, dan Pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Memahami Metode Pengindeks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Memahami Kelebihan Operator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Memahami Konversi Jenis Kustom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Bekerja dengan Tipe Pointer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Petunjuk Praprosesor C#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
nBAB 13 C# 2008 Fitur Bahasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Memahami Variabel Lokal yang Diketik Secara Implisit. . . . . . . . . . . . . . . . . . . . . . . . . . 415
Memahami Properti Otomatis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Memahami Metode Penyuluhan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
nISI vii
Memahami Metode Parsial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Memahami Sintaks Penginisialisasi Objek. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Memahami Tipe Anonim. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
nBAB 14 Pengantar LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Memahami Peran LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Pandangan Pertama pada Ekspresi Kueri LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
LINQ dan Koleksi Generik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
Koleksi LINQ dan Nongenerik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
Representasi Internal Operator Kueri LINQ. . . . . . . . . . . . . . . . . . . . . 459
Menyelidiki Operator Kueri C# LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
Pertanyaan LINQ: Sebuah Pulau Sendiri?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
BAGIAN 4 nnn Pemrograman dengan .NET Assemblies
nBAB 15 Memperkenalkan .NET Assemblies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
Mendefinisikan Ruang Nama Kustom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
Peran Majelis .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Memahami Format Majelis .NET. . . . . . . . . . . . . . . . . . . . . . . . . . 482
Membangun dan Menggunakan Majelis File Tunggal. . . . . . . . . . . . . . . . . . . . . . . . . 486
Membangun dan Menggunakan Majelis Multifile. . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Memahami Majelis Swasta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Memahami Majelis Bersama. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Mengkonsumsi Majelis Bersama. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
Mengonfigurasi Majelis Bersama. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
Menyelidiki Komposisi Internal GAC. . . . . . . . . . . . . . . . . . . . . . . . 516
Memahami Majelis Kebijakan Penerbit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
Memahami Elemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
Ruang Nama Sistem.Konfigurasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
File Konfigurasi Mesin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
nBAB 16 Jenis Refleksi, Pengikatan Akhir, dan Berbasis Atribut
Pemrograman. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
Perlunya Jenis Metadata. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
Pengertian Refleksi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
Membangun Penampil Metadata Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
Memuat Rakitan Secara Dinamis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
Merefleksikan Majelis Bersama. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
Memahami Pengikatan Terlambat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
viii nISI
Memahami Pemrograman Atribut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
Membangun Atribut Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
Atribut Tingkat Perakitan (dan Tingkat Modul). . . . . . . . . . . . . . . . . . . . . . . . . . 549
Merefleksikan Atribut Menggunakan Pengikatan Awal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
Merefleksikan Atribut Menggunakan Pengikatan Akhir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
Menempatkan Refleksi, Pengikatan Terlambat, dan Atribut Khusus dalam Perspektif. . . . . . 553
Membangun Aplikasi yang Dapat Diperluas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
nBAB 17 Proses, AppDomains, dan Konteks Objek . . . . . . . . . . . . . . . . . . . 561
Meninjau Proses Win32 Tradisional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
Berinteraksi dengan Proses di Bawah Platform .NET. . . . . . . . . . . . . . . . . . . . . . 563
Memahami Domain Aplikasi .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
Memahami Batasan Konteks Objek. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
Meringkas Proses, AppDomains, dan Konteks. . . . . . . . . . . . . . . . . . . . . . 581
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
nBAB 18 Membangun Aplikasi Multithread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
Hubungan Proses/AppDomain/Konteks/Utas. . . . . . . . . . . . . . . . . . . . 583
Tinjauan Singkat Delegasi .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
Sifat Delegasi yang Asinkron. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
Memanggil Metode Secara Asinkron. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
Ruang Nama System.Threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
Kelas System.Threading.Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
Membuat Thread Sekunder Secara Terprogram. . . . . . . . . . . . . . . . . . . . . . . . . . 597
Masalah Konkurensi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
Pemrograman dengan Panggilan Balik Timer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609
Memahami CLR ThreadPool. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
Peran Komponen BackgroundWorker. . . . . . . . . . . . . . . . . . . . . . . . . . 612
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616
nBAB 19 Pemahaman CIL dan Peran Dynamic Assemblies . . . . . . . . 617
Merefleksikan Sifat Pemrograman CIL. . . . . . . . . . . . . . . . . . . . . . . . . . . 617
Memeriksa Arahan, Atribut, dan Opcode CIL. . . . . . . . . . . . . . . . . . . . . . . 618
Mendorong dan Memunculkan: Sifat CIL Berbasis Tumpukan. . . . . . . . . . . . . . . . . . . . 620
Memahami Rekayasa Pulang Pergi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
Memahami Arahan dan Atribut CIL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
Perpustakaan Kelas Dasar .NET, Pemetaan Tipe Data C#, dan CIL. . . . . . . . . . . . . . . . 635
Mendefinisikan Anggota Tipe di CIL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
Memeriksa Opcode CIL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
Membangun Majelis .NET dengan CIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
Memahami Majelis Dinamis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
nDAFTAR ix
Bagian 5 nnn Memperkenalkan Perpustakaan Kelas Dasar .NET
nBAB 20 File I/O dan Penyimpanan Terisolasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
Menjelajahi Namespace System.IO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
Jenis Direktori (Info) dan File (Info). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
Bekerja dengan Tipe DirectoryInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
Bekerja dengan Tipe Direktori. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667
Bekerja dengan Tipe Kelas DriveInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
Bekerja dengan Kelas FileInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Bekerja dengan Jenis File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
Kelas Aliran Abstrak. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
Bekerja dengan StreamWriters dan StreamReaders. . . . . . . . . . . . . . . . . . . . . . . . 677
Bekerja dengan StringWriters dan StringReaders. . . . . . . . . . . . . . . . . . . . . . . . . . 680
Bekerja dengan BinaryWriters dan BinaryReaders. . . . . . . . . . . . . . . . . . . . . . . . . . 682
File "Menonton" secara terprogram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
Melakukan I/O File Asinkron. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
Memahami Peran Penyimpanan Terisolasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
Panduan Dasar tentang Keamanan Akses Kode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
Gambaran Umum Penyimpanan Terisolasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
Mendapatkan Penyimpanan Menggunakan IsolatedStorageFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
Penyimpanan Terisolasi dalam Aksi: Penerapan ClickOnce. . . . . . . . . . . . . . . . . . . . . . . . 707
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
nBAB 21 Memperkenalkan Serialisasi Objek. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
Memahami Serialisasi Objek. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
Mengonfigurasi Objek untuk Serialisasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
Memilih Pemformat Serialisasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
Membuat Serialisasi Objek Menggunakan BinaryFormatter . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
Membuat Serialisasi Objek Menggunakan SoapFormatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
Membuat Serialisasi Objek Menggunakan XmlSerializer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
Serialisasi Koleksi Objek. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
Menyesuaikan Proses Serialisasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
nBAB 22 ADO.NET Bagian I: Lapisan Terhubung. . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
Definisi Tingkat Tinggi dari ADO.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
Memahami Penyedia Data ADO.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733
Namespace ADO.NET tambahan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
Jenis System.Data Namespace. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
Mengabstraksi Penyedia Data Menggunakan Antarmuka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
Membuat Basis Data AutoLot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744
Model Pabrik Penyedia Data ADO.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749
Memahami Lapisan Terhubung ADO.NET. . . . . . . . . . . . . . . . . . . . . . . . . 755
Bekerja dengan Pembaca Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760
Membangun Perpustakaan Akses Data yang Dapat Digunakan Kembali. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
x nISI
Membuat Front End Berbasis UI Konsol. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770
Akses Data Asinkron Menggunakan SqlCommand . . . . . . . . . . . . . . . . . . . . . . . . . 775
Pengertian Transaksi Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781
nBAB 23 ADO.NET Bagian II: Lapisan Terputus . . . . . . . . . . . . . . . . . . . . . . . . 783
Memahami Lapisan ADO.NET yang Terputus. . . . . . . . . . . . . . . . . . . . . . 783
Memahami Peran DataSet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784
Bekerja dengan DataColumns. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787
Bekerja dengan DataRows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789
Bekerja dengan DataTables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
Mengikat Objek DataTable ke Antarmuka Pengguna. . . . . . . . . . . . . . . . . . . . . . . . . . . . 798
Mengisi Objek DataSet/DataTable Menggunakan Adaptor Data. . . . . . . . . . . . . . . . . . . 808
Mengunjungi kembali AutoLotDAL.dll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
Menavigasi Objek DataSet Multitabel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814
Alat Akses Data Visual Studio 2008. . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
Memisahkan Kode yang Dihasilkan Otomatis dari Lapisan UI. . . . . . . . . . . . . . . . . . . . . . . 831
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
nBAB 24 Pemrograman dengan LINQ API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
Peran LINQ pada ADO.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
Pemrograman dengan LINQ ke DataSet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838
Pemrograman dengan LINQ ke SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
Menghasilkan Kelas Entitas Menggunakan SqlMetal.exe . . . . . . . . . . . . . . . . . . . . . . . . . . . 848
Membangun Kelas Entitas Menggunakan Visual Studio 2008. . . . . . . . . . . . . . . . . . . . . . . . . 854
Memanipulasi Dokumen XML Menggunakan LINQ ke XML. . . . . . . . . . . . . . . . . . . . . . . . 857
Menavigasi Dokumen Dalam Memori. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
nBAB 25 Memperkenalkan Windows Communication Foundation. . . . . . . . . . . . . . . 867
Bunga rampai API Komputasi Terdistribusi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867
Peran WCF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873
Menyelidiki Majelis Inti WCF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876
Templat Proyek Visual Studio WCF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877
Komposisi Dasar Aplikasi WCF. . . . . . . . . . . . . . . . . . . . . . . . . . . . 879
ABC WCF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880
Membangun Layanan WCF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
Menjadi tuan rumah Layanan WCF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
Membangun Aplikasi Klien WCF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896
Menggunakan Templat Proyek Perpustakaan Layanan WCF. . . . . . . . . . . . . . . . . . . . . . . . . 900
Hosting Layanan WCF Sebagai Layanan Windows. . . . . . . . . . . . . . . . . . . . . . . . . 903
Memanggil Layanan Secara Asinkron. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908
Merancang Kontrak Data WCF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
nISI xi
nBAB 26 Memperkenalkan Windows Workflow Foundation . . . . . . . . . . . . . . . . . . . . . 917
Mendefinisikan Proses Bisnis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917
Blok Bangunan WF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918
Majelis WF, Ruang Nama, dan Proyek. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924
Membangun Aplikasi yang Mendukung Alur Kerja Sederhana. . . . . . . . . . . . . . . . . . . . . . . . . 926
Memeriksa Kode Hosting Mesin WF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
Memanggil Layanan Web Dalam Alur Kerja. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
Membangun Perpustakaan Kode WF yang Dapat Digunakan Kembali. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945
Sepatah Kata Singkat Mengenai Kegiatan Adat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952
Bagian 6 nnn Antarmuka Pengguna Desktop
nBAB 27 Pemrograman dengan Windows Forms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
Ruang Nama Bentuk Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
Membangun Aplikasi Windows Forms Sederhana (Bebas IDE). . . . . . . . . . . . . . . . . . 956
Templat Proyek Visual Studio Windows Forms. . . . . . . . . . . . . . . . . . . . . . 961
Anatomi Suatu Bentuk. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968
Menanggapi Aktivitas Tikus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
Menanggapi Aktivitas Keyboard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977
Merancang Kotak Dialog. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978
Merender Data Grafis Menggunakan GDI+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985
Membangun Aplikasi Windows Forms Lengkap. . . . . . . . . . . . . . . . . . . . . . . . 990
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
nBAB 28 Memperkenalkan Windows Presentation Foundation dan XAML . . . . . . . 999
Motivasi Dibalik WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999
Berbagai Rasa Aplikasi WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002
Menyelidiki Sidang WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004
Membangun Aplikasi WPF (Bebas XAML). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011
Detail Tambahan Jenis Aplikasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015
Detail Tambahan Tipe Jendela. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
Membangun Aplikasi WPF (XAML-Centric). . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021
Mengubah Markup menjadi Majelis .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025
Pemisahan Kekhawatiran Menggunakan File Di Balik Kode. . . . . . . . . . . . . . . . . . . . . . . 1029
Sintaks XAML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031
Membangun Aplikasi WPF Menggunakan Visual Studio 2008. . . . . . . . . . . . . . . . . . . . . 1044
Memproses XAML saat Runtime: SimpleXamlPad.exe . . . . . . . . . . . . . . . . . . . . . . 1048
Peran Campuran Ekspresi Microsoft. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053
xii nISI
nBAB 29 Pemrograman dengan Kontrol WPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055
Survei Perpustakaan Kontrol WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055
Mendeklarasikan Kontrol di XAML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058
Memahami Peran Properti Ketergantungan. . . . . . . . . . . . . . . . . . . . . . 1060
Memahami Peristiwa yang Dirutekan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064
Bekerja dengan Jenis Tombol. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068
Bekerja dengan Kotak Centang dan RadioButtons. . . . . . . . . . . . . . . . . . . . . . . . . . . 1072
Bekerja dengan Tipe ListBox dan ComboBox. . . . . . . . . . . . . . . . . . . . . . . . 1075
Bekerja dengan Area Teks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1081
Mengontrol Tata Letak Konten Menggunakan Panel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1083
Membangun Bingkai Jendela Menggunakan Panel Bersarang. . . . . . . . . . . . . . . . . . . . . . . 1093
Memahami Perintah Kontrol WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099
Memahami Model Pengikatan Data WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . 1102
Konversi Data Menggunakan IValueConverter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106
Mengikat ke Objek Kustom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1108
Mengikat Elemen UI ke Dokumen XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1116
nCHAPTER 30 WPF 2D Rendering Grafis, Sumber Daya, dan Tema . . . . . . . . . 1117
Filosofi Layanan Rendering Grafis WPF. . . . . . . . . . . . . . . . . . . . 1117
Menjelajahi Tipe Turunan Bentuk. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1124
Bekerja dengan Kuas WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
Bekerja dengan Pena WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1130
Menjelajahi Tipe Berasal dari Gambar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1130
Peran Transformasi UI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135
Memahami Layanan Animasi WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136
Memahami Sistem Sumber Daya WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1145
Mendefinisikan dan Menerapkan Gaya untuk Kontrol WPF. . . . . . . . . . . . . . . . . . . . . . . . . 1147
Mengubah UI Kontrol Menggunakan Templat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1156
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1160
Bagian 7 nnn Membangun Aplikasi Web dengan ASP.NET
nBAB 31 Membangun Halaman Web ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1163
Peran HTTP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1163
Pengertian Aplikasi Web dan Server Web. . . . . . . . . . . . . . . . . . . . . . 1164
Peran HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1167
Peran Skrip Sisi Klien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172
Mengirimkan Data Formulir (GET dan POST). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
Membangun Halaman ASP Klasik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
Masalah dengan ASP Klasik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177
Ruang Nama ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178
Model Kode Halaman Web ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179
Detail Struktur Direktori Situs Web ASP.NET. . . . . . . . . . . . . . . . . . . . . . 1190
Siklus Kompilasi Halaman ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192
nDAFTAR xiii
Rantai Warisan Jenis Halaman. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194
Berinteraksi dengan Permintaan HTTP Masuk. . . . . . . . . . . . . . . . . . . . . . . . . . . 1195
Berinteraksi dengan Respons HTTP Keluar. . . . . . . . . . . . . . . . . . . . . . . . . . 1198
Siklus Hidup Halaman Web ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200
Peran File Web.config. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1203
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1206
nBAB 32 Kontrol Web ASP.NET, Tema, dan Halaman Master . . . . . . . . . . . . 1207
Memahami Sifat Kontrol Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1207
Tipe Kontrol Sistem.Web.UI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209
Tipe Sistem.Web.UI.WebControls.WebControl. . . . . . . . . . . . . . . . . . . . . . 1213
Kategori Utama Kontrol Web ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213
Membangun Situs Web ASP.NET yang Kaya Fitur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215
Peran Kontrol Validasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1231
Bekerja dengan Tema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1237
Kontrol Pemosisian Menggunakan Tabel HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1243
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244
nBAB 33 Teknik Manajemen Negara ASP.NET. . . . . . . . . . . . . . . . . . . . . . . 1245
Masalah Negara. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1245
Teknik Manajemen Negara ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1247
Memahami Peran Status Tampilan ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . 1248
Peran File Global.asax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1251
Memahami Perbedaan Aplikasi/Sesi. . . . . . . . . . . . . . . . . . . . . . 1254
Bekerja dengan Cache Aplikasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1259
Memelihara Data Sesi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1263
Memahami Cookie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1267
Peran Elemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1269
Memahami API Profil ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1272
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1279
Bagian 8 nnn Lampiran
nLAMPIRAN Interoperabilitas COM dan .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1283
Ruang Lingkup Interoperabilitas .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1283
Contoh Sederhana Interop .NET ke COM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1284
Menyelidiki Majelis Interop .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1287
Memahami Runtime Callable Wrapper. . . . . . . . . . . . . . . . . . . . . . . . . . 1289
Peran COM IDL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292
Menggunakan Perpustakaan Tipe untuk Membangun Majelis Interop. . . . . . . . . . . . . . . . . . . . . . 1296
Membangun Server COM yang Lebih Rumit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1299
Memeriksa Majelis Interop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1301
Memahami Interoperabilitas COM ke .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1305
Peran CCW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1306
Peran Antarmuka Kelas .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1307
xiv ISI
Membangun Tipe .NET Anda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1308
Menghasilkan Perpustakaan Tipe dan Mendaftarkan Tipe .NET. . . . . . . . . . . . . . 1310
Memeriksa Informasi Jenis yang Diekspor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311
Membangun Klien Uji Visual Basic 6.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1312
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1313
nAPPENDIX B Pengembangan .NET Platform-Independen dengan Mono . . . . . . . . . . . 1315
Sifat Platform-Independen dari .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315
Mendapatkan dan Menginstal Mono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1318
Alat Pengembangan Mono. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1321
Membangun Aplikasi .NET dengan Mono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323
Saran untuk Studi Lebih Lanjut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1330
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1331
nINDEX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1333
Memperluas