Bab 1 Pengenalan C#
Kenali C#, bahasa pemrograman modern dari Microsoft yang digunakan luas untuk membangun aplikasi web, desktop, dan game.
Buka → # Sejarah dan Evolusi C#Telusuri perjalanan C# sejak 2002 hingga versi 13, termasuk perubahan ritme rilis tahunan yang membentuk bahasa modern.
Buka → # C# dan .NETPahami hubungan C# sebagai bahasa dengan .NET sebagai platform, beserta komponen utamanya dan sejarah penyatuannya.
Buka → # Cara Kerja Program C#Ikuti perjalanan file .cs dari source code, kompilasi menjadi assembly, hingga dieksekusi runtime dan menampilkan output.
Buka → # Compiler dan RuntimeKenali Roslyn dan CLR: cara compiler menghasilkan IL, kerja JIT compiler, serta pengelolaan memori oleh garbage collection.
Buka → # Penggunaan C#Jelajahi bidang-bidang penggunaan C# — web, desktop, mobile, game, dan data — beserta framework utama di tiap bidang.
Buka → # Versi C# dan KompatibilitasPahami keterkaitan versi C# dengan versi .NET, cara memeriksanya di komputer, dan prinsip menjaga kompatibilitas kode.
Buka →Bab 2 Persiapan Lingkungan
Instal .NET SDK di Windows, macOS, atau Linux, lalu verifikasi hasil instalasi lewat terminal.
Buka → # Instalasi EditorPilih dan pasang editor atau IDE untuk C#: Visual Studio 2022 Community atau VS Code dengan extension C# Dev Kit.
Buka → # Menggunakan Visual StudioKenali area kerja Visual Studio 2022 Community, buat project console pertama, jalankan program, dan debug dengan breakpoint.
Buka → # Menggunakan VS CodePasang extension C# Dev Kit di VS Code, buka project C#, lalu jalankan dan debug program langsung dari editor.
Buka → # Menggunakan dotnet CLIKuasai perintah dotnet CLI: membuat project baru, build, run, meneruskan argumen ke program, dan publish.
Buka → # Membuat Project PertamaBuat project console pertama bernama HaloApp dari nol, pahami kode bawaan template, lalu ubah dan jalankan program pertama kita.
Buka → # Struktur Project .NETBedah isi project .NET: Program.cs, file .csproj, folder bin dan obj, serta solution untuk beberapa project.
Buka → # Menjalankan ProgramJalankan program C# lewat dotnet run, build terpisah, dan publish, sambil memahami proses kompilasi di baliknya.
Buka → # Mengatasi Masalah LingkunganDiagnosis dan solusi masalah lingkungan C# yang umum: PATH, SDK ganda, TargetFramework mismatch, dan restore NuGet yang terblokir.
Buka →Bab 3 Dasar Pemrograman C#
Pelajari kerangka standar sebuah program C#: using, namespace, class, method Main, dan statement yang dijalankan compiler.
Buka → # Top-level StatementsPelajari cara menulis program C# tanpa kerangka namespace dan class Main, serta aturan batasan compiler terhadap top-level statements.
Buka → # Statement dan ExpressionPelajari perbedaan statement sebagai perintah utuh dan expression sebagai kombinasi yang menghasilkan nilai, beserta cara keduanya menyusun program.
Buka → # KomentarPelajari tiga bentuk komentar C#: komentar satu baris, komentar blok, dan komentar dokumentasi XML beserta aturan pemakaiannya.
Buka → # Identifier dan KeywordPelajari aturan penamaan identifier di C#, konvensi camelCase dan PascalCase, daftar keyword yang direservasi compiler, serta penggunaan tanda @.
Buka → # Aturan Penulisan KodePelajari aturan penulisan kode C#: sifat case-sensitive, kebebasan whitespace, dan kebiasaan format yang membuat kode mudah dibaca tim.
Buka → # LiteralPelajari bentuk-bentuk literal di C#: integer, real, char, string termasuk verbatim dan raw string, boolean, serta null.
Buka → # Console ApplicationPelajari siklus kerja aplikasi console di .NET: membuat project dengan dotnet new console, mengenal isi foldernya, menjalankan, dan mengubah program.
Buka →Bab 4 Variabel dan Tipe Data
Pelajari cara mendeklarasikan variable di C#: menentukan tipe, memberi nilai awal, hingga aturan definite assignment dari compiler.
Buka → # KonstantaPelajari cara membuat nilai tetap dengan keyword const: aturan inisialisasi, larangan perubahan, dan konvensi penamaannya.
Buka → # Tipe Nilai dan Tipe ReferensiPahami dua keluarga tipe di C#: value type yang menyimpan nilai langsung dan reference type yang menyimpan alamat object di heap.
Buka → # Tipe NumerikKenali seluruh tipe numerik C#: delapan tipe bilangan bulat dari sbyte hingga long dan tiga tipe bilangan riil float, double, serta decimal.
Buka → # Tipe BooleanPelajari tipe bool yang hanya menampung true atau false, cara perbandingan menghasilkan bool, serta operator logika penggabungnya.
Buka → # Tipe KarakterPelajari tipe char untuk satu karakter Unicode, escape sequence, representasi kode di balik layar, dan method bawaan pemeriksa karakter.
Buka → # StringKuasai tipe string: penggabungan teks, pengukuran panjang, method bawaan yang sering dipakai, dan sifat immutable yang menentukan cara mengubah teks.
Buka → # Object dan DynamicPahami tipe object sebagai induk seluruh tipe C# dan tipe dynamic yang menunda pemeriksaan operasi hingga runtime.
Buka → # Var dan Inferensi TipePelajari keyword var yang meminta compiler menyimpulkan tipe variable dari inisialisasinya, beserta tiga batasan dan kapan var layak dipakai.
Buka → # Konversi TipePelajari cara mengubah nilai antar tipe pada value: konversi implicit yang aman, konversi explicit berupa cast, hingga Convert.ToXxx dan int.Parse.
Buka → # Boxing dan UnboxingPahami proses boxing ketika value type dikemas menjadi object di heap dan proses unboxing saat nilainya diambil kembali.
Buka → # Default ValuesPelajari nilai default setiap tipe di C#, keyword default untuk memintanya secara eksplisit, dan perbedaan perlakuan variable lokal versus field.
Buka → # Batas dan OverflowPahami batas setiap tipe numerik, perilaku overflow saat batas terlampaui, serta mode checked dan unchecked untuk mengendalikannya.
Buka → # Type CastingPelajari cast pada sudut pandang hierarki tipe: upcasting ke tipe induk, downcasting ke tipe turunan, serta operator as, is, dan type pattern.
Buka →Bab 5 Operator
Pelajari lima operator aritmetika C#: penjumlahan, pengurangan, perkalian, pembagian, dan modulo, termasuk perilaku pembagian integer serta overflow.
Buka → # Operator PenugasanPelajari operator penugasan dasar (=) dan compound assignment (+=, -=, *=, /=, %=) untuk menyimpan serta memperbarui nilai variabel secara ringkas.
Buka → # Operator PerbandinganPelajari enam operator perbandingan C# yang menghasilkan nilai bool, termasuk perilaku case-sensitive saat membandingkan string.
Buka → # Operator LogikaPelajari operator logika &&, ||, dan ! untuk menggabungkan kondisi, termasuk bukti kerja short-circuit lewat output nyata.
Buka → # Operator BitwisePelajari operator bitwise &, |, ^, dan ~ yang bekerja pada level bit integer, lengkap dengan tampilan pola biner dan pola flag.
Buka → # Operator Increment dan DecrementPelajari operator ++ dan -- beserta perbedaan perilaku prefix dan postfix saat nilai variabel dibaca dan diubah.
Buka → # Operator TernaryPelajari operator ternary ? : untuk memilih salah satu dari dua nilai berdasarkan kondisi bool dalam satu expression.
Buka → # Operator NullPelajari operator ??, ??=, dan ?. untuk menangani nilai null pada variabel reference secara ringkas dan aman.
Buka → # Operator TypePelajari operator is, as, typeof, dan sizeof untuk memeriksa tipe nilai, mengonversi dengan aman, serta membaca informasi tipe.
Buka → # Operator ShiftPelajari operator shift << dan >> yang menggeser bit bilangan integer, ekuivalen dengan perkalian dan pembagian pangkat dua.
Buka → # Operator OverloadingPelajari cara mendefinisikan perilaku operator untuk tipe buatan sendiri melalui operator overloading pada struct Uang sederhana.
Buka → # Precedence dan AssociativityPelajari aturan precedence dan associativity yang menentukan urutan evaluasi ketika beberapa operator dipakai dalam satu expression.
Buka →Bab 6 Input dan Output
Pelajari perbedaan Console.Write dan Console.WriteLine dalam menampilkan teks ke console, termasuk penggunaan escape sequence.
Buka → # Membaca InputPelajari cara membaca masukan pengguna dengan Console.ReadLine, memahami tipe string? yang dikembalikannya, dan menampilkannya kembali.
Buka → # Parsing InputPelajari cara mengubah string hasil input menjadi angka dan tipe lain dengan int.Parse, double.Parse, dan bool.Parse, serta mengenali FormatException.
Buka → # TryParse dan Validasi InputPelajari cara memvalidasi input pengguna dengan int.TryParse dan pola loop while yang mengulang permintaan sampai input valid diterima.
Buka → # String InterpolationPelajari cara menanamkan variabel dan expression ke dalam string dengan sintaks $ dan kurung kurawal, termasuk alignment dan penulisan kurung kurawal literal.
Buka → # Format StringPelajari format specifier untuk angka, persen, mata uang, dan tanggal di C#, serta cara menyetel regional agar output konsisten.
Buka → # Composite FormattingPelajari composite formatting dengan placeholder {0}, {1} beserta alignment dan format specifier, gaya pemformatan yang masih dipakai banyak pustaka .NET.
Buka → # Console Color dan TerminalPelajari cara memberi warna teks dan latar di console dengan Console.ForegroundColor dan BackgroundColor, serta praktik penggunaannya dengan baik.
Buka →Bab 7 Control Flow
Pelajari cara program C# mengambil keputusan dengan statement if, else if, dan else beserta aturan pemakaiannya.
Buka → # Switch StatementGunakan switch statement untuk membandingkan satu nilai dengan banyak case secara rapi tanpa rantai if-else yang panjang.
Buka → # Switch ExpressionPelajari switch expression C#: sintaks panah yang mengembalikan nilai, arm bersyarat, relational pattern, hingga logical pattern and dan or.
Buka → # Pattern Matching DasarKenali pattern matching C#: type pattern dengan operator is, logical pattern not, property pattern, relational pattern, dan tuple pattern.
Buka → # For LoopPelajari struktur for loop di C#: bagian init, condition, dan iterator, beserta alur eksekusinya dari awal hingga berhenti.
Buka → # While LoopGunakan while loop untuk mengulang blok kode selama sebuah kondisi masih true, tanpa perlu tahu jumlah iterasi di awal.
Buka → # Do-While LoopPelajari do-while loop: blok kode yang dijamin dieksekusi minimal satu kali karena kondisi diperiksa setelah body.
Buka → # Foreach LoopGunakan foreach loop untuk mengunjungi setiap elemen array atau List secara berurutan tanpa mengelola indeks secara manual.
Buka → # Break dan ContinueKendalikan jalannya loop dengan break untuk keluar lebih awal dan continue untuk melewati iterasi tertentu.
Buka → # Goto dan LabelKenali goto dan label di C#: cara melompat eksekusi ke label, satu kasus yang masih wajar dipakai, dan alasan statement ini jarang dipakai.
Buka → # Nested LoopPelajari nested loop di C#: loop di dalam loop untuk memproses data berlapis seperti denah kursi bioskop dan grid koordinat.
Buka → # Control Flow Best PracticesRangkum praktik terbaik control flow di C#: memilih statement yang tepat, mengurangi nesting dengan guard clause, dan menjaga kondisi tetap ringkas.
Buka →Bab 8 Array dan String
Pelajari cara menyimpan banyak nilai sejenis dalam satu variabel array, membaca dan mengubah elemen melalui indeks, serta memahami batas indeks yang sah.
Buka → # Array MultidimensiKelola data berbentuk tabel dengan array multidimensi: deklarasi baris dan kolom, properti Rank dan GetLength, serta penelusuran loop bersarang.
Buka → # Array JaggedSimpan baris dengan panjang berbeda menggunakan array jagged: array yang elemennya berupa array lain, beserta cara penelusurannya.
Buka → # Inisialisasi dan Akses ArrayKenali bentuk-bentuk inisialisasi array, perilaku nilai default tiap elemen, serta indeks dari akhir dengan operator hat.
Buka → # Iterasi ArrayTelusuri elemen array dengan for loop ketika nomor posisi dibutuhkan, foreach untuk pembacaan berurutan, dan for terbalik untuk urutan mundur.
Buka → # Menyalin dan Membandingkan ArrayPahami perbedaan menyalin referensi dan menyalin isi array, gunakan Clone dan CopyTo, serta bandingkan dua array dengan benar.
Buka → # Array Class MethodsGunakan method statik kelas Array untuk mengurutkan, membalik, mencari, mengisi, dan membersihkan elemen array tanpa menulis loop manual.
Buka → # String ImmutabilityPahami sifat immutable string: setiap operasi menghasilkan objek baru, dan lihat bagaimana perbandingan serta penulisan ulang string bekerja.
Buka → # String MethodsGunakan method bawaan string untuk membersihkan, memotong, memeriksa, dan memformat teks, mulai dari Trim hingga PadLeft.
Buka → # Pencarian dan Penggantian StringTemukan posisi substring dengan IndexOf dan LastIndexOf, lalu susun ulang teks dengan Replace, Remove, dan Insert.
Buka → # Pemisahan dan Penggabungan StringPecah teks menjadi potongan-potongan dengan Split dan susun kembali banyak nilai menjadi satu string dengan Join serta Concat.
Buka → # StringBuilderSusun teks panjang secara efisien dengan StringBuilder: Append, AppendLine, Replace, dan ToString dalam satu buffer yang dapat diubah.
Buka → # Raw String LiteralsTulis teks bertanda kutip dan backslash tanpa escape sama sekali menggunakan raw string literal dari C# 11.
Buka → # Verbatim String LiteralsTulis jalur berkas dan teks multiline tanpa escape backslash memakai string verbatim berawalan @.
Buka → # Interpolated String HandlerKenali mekanisme di balik interpolasi string: pola interpolated string handler dengan AppendLiteral dan AppendFormatted untuk mengendalikan pembangunan teks.
Buka → # Span dan MemoryPotong dan periksa string tanpa menyalin memori memakai ReadOnlySpan, siapkan buffer stackalloc, dan kenali Memory untuk skenario async.
Buka →Bab 9 Fungsi dan Method
Pelajari anatomi deklarasi method di C#: return type, nama, parameter list, body, dan aturan penulisannya.
Buka → # Pemanggilan MethodPelajari cara memanggil method, aliran eksekusi yang berpindah lalu kembali ke titik panggilan, serta cara menangkap nilai kembalian.
Buka → # Parameter dan Return ValuePahami kontrak masukan dan keluaran sebuah method: perbedaan parameter dan argument, return type, serta perilaku statement return.
Buka → # Optional ParametersPelajari parameter dengan nilai default (optional parameter) beserta aturan penempatan dan batasannya.
Buka → # Named ArgumentsPelajari named arguments untuk menyebut nama parameter saat pemanggilan sehingga kode lebih terbaca dan optional parameter di tengah dapat dilewati.
Buka → # Method OverloadingPelajari method overloading: satu nama method dengan beberapa signature dan cara compiler memilih overload yang tepat.
Buka → # Local FunctionsPelajari local functions, method di dalam method yang dapat membaca variabel lokal method pembungkusnya.
Buka → # Expression-Bodied MembersPelajari bentuk ringkas => untuk menulis method yang body-nya hanya satu expression.
Buka → # Recursive MethodsPelajari method rekursif: base case, recursive case, dan alur panggilan yang menumpuk di call stack.
Buka → # Ref, Out, dan InPelajari tiga kata kunci penerusan referensi: ref untuk membaca dan mengubah, out untuk keluaran tambahan, dan in untuk data baca saja.
Buka → # Params ParameterPelajari params untuk menerima jumlah argument yang tidak pasti tanpa menulis array secara manual.
Buka → # Tuple Return ValuesPelajari cara mengembalikan beberapa nilai sekaligus dengan tuple type, tuple literal, dan deconstruction.
Buka → # Extension MethodsPelajari extension methods untuk menambah method baru pada tipe yang sudah ada melalui modifier this pada static method.
Buka → # Partial MethodsPelajari partial methods: deklarasi di satu bagian class, implementasi opsional di bagian lain, dan polanya pada source generator modern.
Buka → # Desain Method yang BaikPelajari prinsip merancang method: satu tugas per method, penamaan deskriptif, parameter secukupnya, dan efek samping yang terkendali.
Buka →Bab 10 Koleksi Dasar
Gunakan List untuk menyimpan kumpulan item yang ukurannya dapat bertambah dan berkurang saat program berjalan.
Buka → # DictionarySimpan dan cari data sebagai pasangan key-value dengan Dictionary, koleksi yang mengakses nilai lewat kunci unik tanpa memindai seluruh isi.
Buka → # HashSetKelola kumpulan elemen unik dengan HashSet, koleksi yang menolak duplikat secara otomatis dan memeriksa keanggotaan dengan cepat.
Buka → # QueueGunakan Queue untuk memproses item dengan urutan masuk-pertama-keluar-pertama (FIFO) seperti antrian loket bank.
Buka → # StackGunakan Stack untuk memproses item dengan urutan masuk-terakhir-keluar-pertama (LIFO), misalnya riwayat navigasi dan fitur undo.
Buka → # LinkedListGunakan LinkedList untuk menyisipkan dan menghapus item di posisi mana pun dengan cepat lewat rantai node yang saling terhubung.
Buka → # SortedList dan SortedDictionarySimpan pasangan key-value yang selalu terurut berdasarkan kunci dengan SortedList dan SortedDictionary, beserta perbedaan performa keduanya.
Buka → # SortedSetSimpan elemen unik yang selalu terurut dengan SortedSet, lengkap dengan pencarian rentang lewat GetViewBetween.
Buka → # Collection InitializersIsi koleksi langsung saat deklarasi menggunakan collection initializer untuk List dan Dictionary tanpa pemanggilan Add berulang.
Buka → # Collection ExpressionTulis koleksi dengan sintaks kurung siku [ ... ] dari C# 12: lebih ringkas dari initializer dan berlaku untuk berbagai tipe koleksi.
Buka → # Memilih Tipe KoleksiPetakan kebutuhan program ke tipe koleksi yang tepat: List, Dictionary, HashSet, Queue, Stack, atau koleksi terurut.
Buka → # Kompleksitas Operasi KoleksiPahami biaya operasi koleksi dengan notasi Big-O sehingga pilihan koleksi berpijak pada performa, bukan kebiasaan.
Buka →Bab 11 Exception Handling
Pahami apa itu exception, apa yang dilakukan runtime saat exception muncul, dan mengapa exception perlu ditangkap.
Buka → # Try-CatchBungkus kode berpotensi gagal dengan try-catch agar program tetap berjalan saat input atau data tidak valid.
Buka → # Multiple CatchTangani beberapa jenis exception sekaligus dengan beberapa blok catch yang diurutkan dari tipe paling spesifik.
Buka → # FinallyGunakan blok finally untuk menjamin kode pembersihan selalu dijalankan, baik try berhasil, gagal, maupun tertangkap di catch.
Buka → # Throw dan RethrowLempar exception dengan throw untuk melaporkan kegagalan dari method, dan lempar ulang dengan throw; tanpa kehilangan informasi.
Buka → # Exception FiltersSeleksi kondisi penangkapan exception dengan kata kunci when agar blok catch hanya menangani kegagalan yang memenuhi syarat.
Buka → # Membuat Custom ExceptionDefinisikan tipe exception sendiri untuk kegagalan spesifik bisnis, seperti stok tidak cukup, agar penanganan lebih jelas dan aman dideteksi.
Buka → # Exception InnerExceptionBungkus exception tingkat rendah ke dalam exception berkonteks bisnis menggunakan properti InnerException tanpa kehilangan penyebab asalnya.
Buka → # Exception StackTraceBaca properti StackTrace untuk menelusuri rantai pemanggilan method dari titik kegagalan hingga titik masuk program.
Buka → # Exception Best PracticesTerapkan praktik penanganan exception yang disarankan: tangkap tipe spesifik, tulis pesan yang menjelaskan, dan jangan gunakan exception untuk alur normal.
Buka → # Exception vs Result PatternBandingkan dua cara melaporkan kegagalan: melempar exception atau mengembalikan nilai yang menggambarkan hasil, beserta kapan masing-masing tepat.
Buka →Bab 12 Pemrograman Berorientasi Objek
Pelajari pemikiran dasar pemrograman berorientasi objek: menyatukan data dan perilaku ke dalam class, lalu menjalankannya melalui object.
Buka → # Class dan ObjectDefinisikan class RekeningBank, buat object dengan new, dan buktikan bahwa setiap object menyimpan datanya sendiri.
Buka → # Field dan MethodBedah dua jenis anggota class: field sebagai penyimpan data object dan method sebagai perilaku yang mengoperasikan data tersebut.
Buka → # ConstructorPastikan data object terisi sejak awal dengan constructor yang menerima nomor, pemilik, dan saldo awal rekening.
Buka → # Constructor OverloadingSediakan beberapa cara membuka rekening dengan mendefinisikan lebih dari satu constructor dalam satu class.
Buka → # Object InitializersIsi field object langsung saat pembuatan tanpa menulis constructor tambahan dengan object initializer.
Buka → # This KeywordGunakan this untuk merujuk object yang sedang menjalankan kode, membedakan field dari parameter, dan memanggil constructor lain.
Buka → # Static MembersSimpan data milik class secara bersama melalui static field dan static method, lengkap dengan penghitung jumlah rekening.
Buka → # Access ModifiersAtur siapa yang boleh mengakses anggota class dengan public, private, internal, dan protected.
Buka → # EncapsulationPelajari cara menyembunyikan data di dalam class dengan access modifier private dan membuka akses terkontrol melalui property serta method.
Buka → # InheritancePelajari cara class mewarisi member dari class lain melalui hubungan base class dan derived class untuk mengurangi duplikasi kode.
Buka → # Method OverridingPelajari cara mengganti perilaku method warisan dengan pasangan kata kunci virtual dan override, termasuk memanggil versi aslinya lewat base.
Buka → # PolymorphismPahami dynamic dispatch: satu pemanggilan method pada reference bertipe dasar dapat menjalankan perilaku berbeda sesuai tipe object aslinya.
Buka → # Abstract ClassPelajari cara membuat class dasar yang tidak dapat diinstansiasi dan mewajibkan setiap subclass mengisi method abstract miliknya.
Buka → # InterfacePelajari cara mendefinisikan kontrak perilaku dengan interface dan mengimplementasikannya pada class yang berbeda-beda.
Buka → # Composition dan AggregationPahami dua pola hubungan antar object: composition yang menyatukan siklus hidup bagian ke dalam keseluruhan, dan aggregation yang menghubungkan object secara longgar.
Buka → # Object EqualityPelajari cara membandingkan dua object di C#: perbandingan reference oleh operator ==, override Equals dan GetHashCode, serta IEquatable<T>.
Buka → # Object ToStringPelajari cara mengatur representasi teks sebuah object melalui override method ToString yang diwarisi dari class Object.
Buka → # Object LifecyclePahami siklus hidup object di C#: dibuat lewat new di heap, hidup selama masih dirujuk, lalu dibersihkan garbage collection saat tak dirujuk lagi.
Buka → # Prinsip OOPRangkum empat pilar pemrograman berorientasi objek: encapsulation, inheritance, polymorphism, dan abstraction, beserta pengantar Single Responsibility Principle.
Buka →Bab 13 Properties dan Encapsulation
Pelajari cara kerja property di C#: anggota class yang terbaca seperti field tetapi dijalankan sebagai kode aksesor get dan set.
Buka → # Getter dan SetterPelajari aksesor get dan set secara detail: membaca property, menulis property lewat value, serta membatasi akses tulis dengan property get-only.
Buka → # Auto-Implemented PropertiesPelajari auto-implemented properties: sintaks get dan set tanpa field manual karena compiler menyediakan backing field secara otomatis.
Buka → # Init-Only PropertiesPelajari aksesor init pada property C#: nilai hanya boleh diisi saat object dibuat, lalu terkunci untuk sisa masa program.
Buka → # Required MembersPelajari modifier required pada property C#: compiler memaksa setiap object initializer mengisi property yang ditandai sebelum kode dikompilasi.
Buka → # Expression-Bodied PropertiesPelajari sintaks expression-bodied untuk property C#: aksesor satu baris ditulis ringkas dengan operator =>.
Buka → # Property ValidationPelajari cara memasang validasi di aksesor set: nilai yang melanggar aturan ditolak lewat exception sebelum menyentuh data class.
Buka → # Computed PropertiesPelajari computed properties: nilai yang dihitung setiap kali dibaca dari anggota class lain sehingga data turunan tidak pernah berbeda dari sumbernya.
Buka → # Backing FieldsPelajari backing field manual: satu field privat yang menopang beberapa property sekaligus ketika auto-implemented property tidak mencukupi.
Buka → # Field-Backed PropertiesPelajari kata kunci field pada property C#: logika aksesor ditulis lepas tanpa mendeklarasikan backing field manual.
Buka → # IndexersPelajari indexer pada class C#: mengakses item data lewat notasi kurung siku seperti array, lengkap dengan aksesor get dan set berparameter index.
Buka → # Encapsulation Best PracticesRangkuman praktik terbaik encapsulation: memilih akses property yang paling ketat, memusatkan validasi, dan menutup section dengan contoh class terpadu.
Buka →Bab 14 Inheritance dan Polymorphism
Pelajari cara membentuk hierarki class, di mana derived class mewarisi field dan method milik base class melalui satu tanda titik dua.
Buka → # Base KeywordPelajari cara memakai kata kunci base untuk memanggil constructor dan method milik base class dari dalam derived class.
Buka → # Virtual dan OverridePelajari pasangan kata kunci virtual dan override untuk mengganti perilaku method warisan, termasuk rantai override dan perluasan dengan base.
Buka → # New Keyword dalam InheritancePelajari method hiding dengan kata kunci new, cara pemilihan versinya yang berbeda dari override, dan pesan compiler CS0108.
Buka → # Abstract MembersPelajari cara mewajibkan turunan mengisi implementasi melalui abstract class dan abstract member pada sistem penggajian.
Buka → # Sealed Class dan MembersPelajari cara menghentikan pewarisan dengan sealed pada class dan menutup rantai override dengan sealed override.
Buka → # Interface ImplementationPelajari implementasi interface secara teknis: member property, beberapa interface dalam satu class, dan pemeriksaan kemampuan dengan pola is.
Buka → # Explicit Interface ImplementationPelajari cara menyelesaikan konflik nama member antara dua interface dengan implementasi eksplisit di aplikasi kasir POS.
Buka → # Default Interface MembersPelajari cara memberi implementasi bawaan pada member interface sejak C# 8, sehingga class lama tetap kompatibel tanpa perubahan.
Buka → # Covariance dan ContravariancePelajari cara array dan tipe generic seperti IEnumerable, Func, dan Action dikonversi mengikuti arah pewarisan tipenya.
Buka → # Runtime PolymorphismPelajari cara satu pemanggilan method menjalankan implementasi berbeda saat program berjalan melalui dynamic dispatch pada hierarki armada.
Buka → # Inheritance vs CompositionPelajari perbandingan inheritance dan composition melalui contoh mobil dengan mesin, beserta panduan memilih di antara keduanya.
Buka →Bab 15 Interface dan Abstraction
Pelajari aturan mendefinisikan interface di C#: member yang boleh ditulis, akses implisitnya, dan status interface sebagai sebuah tipe.
Buka → # Mengimplementasikan InterfacePelajari cara class menepati kontrak interface: mengisi seluruh member, memakai implementasi lewat tipe interface, dan galat bila ada member yang tertinggal.
Buka → # Interface SegregationPelajari prinsip interface segregation: memecah kontrak yang menggabungkan terlalu banyak kemampuan agar class hanya mengisi member yang benar-benar dipakai.
Buka → # Multiple Interface ImplementationPelajari cara satu class mengimplementasikan beberapa interface sekaligus dan mengekspos object yang sama melalui beberapa sudut pandang kontrak.
Buka → # Interface InheritancePelajari cara interface mewarisi interface lain untuk menambah kemampuan baru tanpa mengubah kontrak lama yang sudah dipakai banyak class.
Buka → # Explicit ImplementationPelajari cara menyelesaikan benturan member dengan nama sama dari dua interface menggunakan explicit implementation.
Buka → # Default Interface MethodsPelajari cara memberi badan bawaan pada member interface sehingga class lama tidak wajib mengisi method yang baru ditambahkan.
Buka → # Abstract Class vs InterfacePelajari perbedaan pokok abstract class dan interface beserta cara memadukan keduanya dalam satu hierarki metode pembayaran.
Buka → # Programming to InterfacePelajari prinsip programming to interface: mengganti ketergantungan pada class konkret dengan ketergantungan pada kontrak agar kode mudah diperluas.
Buka → # Abstraction dalam DesainRangkum seluruh materi section ini menjadi keputusan desain nyata: menyusun kontrak yang tepat dan membangun alur checkout yang fleksibel.
Buka →Bab 16 Struct, Record, dan Enum
Pelajari cara mendefinisikan tipe data bernilai sendiri dengan struct dan memahami semantik salinan nilainya.
Buka → # Readonly StructPelajari cara membuat struct yang tidak dapat diubah setelah dibuat menggunakan modifier readonly.
Buka → # Ref StructKenali ref struct: struct khusus yang hanya boleh tinggal di stack, dengan ReadOnlySpan sebagai contoh utamanya.
Buka → # Record ClassPelajari record class: tipe referensi yang kesetaraannya membandingkan isi, lengkap dengan anggota yang dibangkitkan compiler.
Buka → # Record StructPelajari record struct: gabungan semantik nilai struct dan anggota kesetaraan record dalam satu deklarasi.
Buka → # Record EqualityPahami cara compiler menentukan dua record dianggap sama: perbandingan seluruh isi, kode hash, hingga pemeriksaan tipe runtime.
Buka → # With ExpressionPelajari with expression: membuat salinan dengan sebagian nilai diganti, tanpa mengubah data asalnya.
Buka → # EnumPelajari enum: memberi nama pada sekumpulan konstanta bernomor agar program lebih mudah dibaca dan dijaga.
Buka → # Enum Underlying TypePelajari tipe dasar di balik enum: memilih byte atau short, memberi nilai eksplisit, dan berpindah antara angka dan nama.
Buka → # Flags EnumPelajari flags enum: menggabungkan beberapa pilihan dalam satu nilai dengan atribut Flags dan operator bitwise.
Buka → # Tuple TypesPelajari tuple type di C#: struktur data ringan dengan elemen bernama, deconstruction, dan pertukaran nilai tanpa tipe baru.
Buka → # Anonymous TypesPelajari anonymous types: tipe sekali pakai yang dibuat compiler dari daftar property, beserta aturan kesetaraannya.
Buka → # Value ObjectPelajari pola desain value object dari domain-driven design pada tingkat pengantar, dibangun dengan record di C#.
Buka → # Memilih Class, Struct, RecordRangkuman panduan memilih antara class, struct, record class, dan record struct beserta alasan teknisnya.
Buka →Bab 17 Generics
Pelajari cara mendefinisikan class dengan type parameter agar satu definisi dapat menyimpan dan mengolah tipe data apa pun dengan keamanan tipe penuh.
Buka → # Generic MethodPelajari cara mendeklarasikan method dengan type parameter sendiri sehingga satu method dapat bekerja untuk banyak tipe tanpa overload berulang.
Buka → # Generic InterfacePelajari cara mendefinisikan kontrak dengan type parameter dan mengimplementasikannya pada class generik maupun class biasa.
Buka → # Generic StructPelajari cara mendefinisikan struct dengan type parameter untuk pasangan data bernilai yang hemat memori tanpa alokasi heap tambahan.
Buka → # Generic ConstraintsPelajari cara membatasi type parameter dengan klausa where agar badan kode generik dapat memakai kemampuan tertentu dari tipe yang diterimanya.
Buka → # Type ParameterPelajari aturan scope dan konvensi penamaan type parameter, termasuk deklarasi dengan lebih dari satu type parameter.
Buka → # Generic Type InferencePelajari cara compiler menyimpulkan type argument dari argumen pemanggilan, kapan inference berhasil, dan kapan kita wajib menulis type argument secara eksplisit.
Buka → # Covariance dan Contravariance GenericsPelajari kapan List turunan boleh dipakai sebagai kumpulan induk lewat kata kunci out dan in pada deklarasi interface dan delegate.
Buka → # Generic NullabilityPelajari makna tanda T? pada kode generik yang bergantung pada constraint, mulai dari Nullable<T> hingga nullable reference type.
Buka → # Generic MathPelajari cara menulis algoritma hitung generik untuk semua tipe numerik dengan interface INumber<T> yang tersedia sejak .NET 7.
Buka → # Static Abstract Interface MembersPelajari cara mendeklarasikan anggota static abstract pada interface sehingga kode generik dapat memanggil anggota static lewat type parameter.
Buka → # Generic CollectionsPelajari tur singkat koleksi generik inti .NET: List, Dictionary, dan IEnumerable sebagai fondasi pengelolaan data bertipe kuat.
Buka → # Desain API GenerikPelajari panduan merancang API generik yang nyaman dipakai, dari perbandingan dengan API berbasis object hingga daftar periksa desain.
Buka →Bab 18 Collections dan Iterators
Kenali kontrak standar koleksi .NET: IEnumerable, ICollection, IList, dan IDictionary sebagai fondasi seluruh bab di section ini.
Buka → # IEnumerable dan IEnumeratorBongkar mekanisme foreach dengan mengenal pasangan interface IEnumerable dan IEnumerator yang mendasari semua iterasi di .NET.
Buka → # Iterator PatternPelajari pola desain yang menyembunyikan struktur internal koleksi di balik iterator: aggregate menyediakan, konsumen membaca.
Buka → # Yield ReturnGunakan yield return untuk membuat iterator dengan singkat: compiler yang membangun state machine-nya.
Buka → # Yield BreakHentikan iterasi lebih awal dengan yield break ketika sisa item sudah tidak relevan untuk dikirim.
Buka → # Lazy IterationPahami sifat tunda eksekusi iterator method: badan baru berjalan saat enumerasi, dan berjalan ulang pada setiap enumerasi.
Buka → # Custom IteratorBangun koleksi dengan enumerator buatan sendiri: implementasi penuh IEnumerable dan IEnumerator tanpa yield.
Buka → # Collection InitializationKetahui mekanisme di balik collection initializer, cara membuat tipe kustom yang mendukungnya, dan collection expression dari C# 12.
Buka → # Immutable CollectionsGunakan koleksi dari System.Collections.Immutable yang tidak bisa diubah, sehingga setiap modifikasi menghasilkan koleksi baru.
Buka → # Frozen CollectionsManfaatkan FrozenDictionary dan FrozenSet dari .NET 8 untuk data yang dibangun sekali dan dibaca berkali-kali.
Buka → # Concurrent CollectionsGambaran singkat System.Collections.Concurrent: ConcurrentDictionary dan ConcurrentQueue untuk data yang disentuh banyak thread.
Buka → # Collection PerformanceBandingkan biaya operasi antar keluarga koleksi lewat tabel Big-O dan kuasai pralokasi capacity untuk menghemat penyalinan.
Buka → # Collection DesignRancang API yang menyimpan koleksi dengan aman: enkapsulasi internal, tampilan baca-saja, dan pemilihan tipe parameter yang tepat.
Buka →Bab 19 Delegates dan Events
Pelajari delegate sebagai tipe yang merepresentasikan method sehingga method dapat disimpan ke variabel, dikirim, dan dipanggil lewat nama variabel.
Buka → # Action, Func, dan PredicateKenali tiga tipe delegate generik bawaan .NET: Action untuk method tanpa return, Func untuk method dengan return, dan Predicate untuk uji syarat.
Buka → # Multicast DelegateGunakan operator += dan -= untuk menumpuk banyak method dalam satu delegate sehingga satu pemanggilan menjalankan seluruh daftar secara berurutan.
Buka → # Anonymous MethodTulis delegate inline dengan keyword delegate tanpa mendeklarasikan method terpisah untuk logika kecil yang hanya dipakai satu kali.
Buka → # Lambda ExpressionPadatkan anonymous method menjadi lambda expression dengan operator => dan biarkan compiler menyimpulkan tipe parameternya.
Buka → # Event DasarPelajari keyword event yang membungkus delegate dengan aturan akses sehingga kode luar hanya dapat mendaftar dan melepas handler.
Buka → # Event Publisher dan SubscriberTerapkan pola publisher-subscriber: satu class menerbitkan event, modul lain berlangganan, dan publisher tidak perlu mengenal subscriber.
Buka → # EventHandlerIkuti konvensi .NET dengan EventHandler dan EventHandler<TEventArgs> beserta class EventArgs untuk membawa data event secara terstruktur.
Buka → # Custom Event AccessorsKendalikan perilaku pendaftaran handler dengan accessor add dan remove yang menulis sendiri backing field event.
Buka → # Event LifecycleIkuti empat tahap siklus hidup event, dari deklarasi, langganan, pemicuan, hingga pelepasan handler.
Buka → # Event Memory LeaksLihat bagaimana publisher memegang referensi subscriber dan cegah memory leak dengan unsubscribe lewat operator -= atau pola IDisposable.
Buka → # Delegates vs InterfacesBandingkan delegate dan interface sebagai dua cara menukar perilaku saat runtime, beserta panduan memilih di antara keduanya.
Buka →Bab 20 Lambda dan Expression
Bedah anatomi sintaks lambda: parameter, panah =>, dan body, beserta variasi bentuknya dari tanpa parameter hingga tipe eksplisit.
Buka → # Statement LambdaGunakan statement lambda dengan blok kurawal ketika logika lambda membutuhkan beberapa statement dan return eksplisit.
Buka → # Expression LambdaGunakan expression lambda, bentuk paling ringkas tanpa kurawal dan return, ketika body hanya terdiri dari satu ekspresi.
Buka → # ClosurePahami bagaimana lambda menangkap variabel di sekitarnya by reference sehingga perubahan variabel terasa dan umurnya ikut diperpanjang.
Buka → # Variable CaptureAmati jebakan loop variable pada closure dan perbaiki dengan menyalin nilai ke variabel lokal di setiap iterasi.
Buka → # Expression-Bodied LambdaJelajahi operator => yang menjalar dari lambda ke member class: method, property, hingga menggantikan getter sederhana.
Buka → # Expression Trees IntroductionUbah lambda menjadi data dengan Expression<Func<>> dan telusuri pohon node-nya sebagai langkah pertama membaca kode sebagai data.
Buka → # Func, Action, PredicateGunakan tabel referensi Func, Action, dan Predicate beserta contoh gabungan untuk memilih tipe delegate yang tepat saat menulis lambda.
Buka → # Higher-Order FunctionsBangun method yang menerima dan mengembalikan method lain sehingga strategi diskon dapat dibuat dinamis lewat lambda.
Buka → # Lambda PerformanceUkur alokasi memori lambda non-capturing versus capturing dan terapkan kebiasaan yang menekan tekanan pada garbage collector.
Buka →Bab 21 LINQ
Pelajari LINQ (Language Integrated Query), fitur C# untuk mengkueri koleksi dengan satu sintaks terpadu, beserta peta kategori operatornya.
Buka → # Query SyntaxPelajari query expression C#: klausa from, where, orderby, dan select untuk menyusun kueri yang alurnya mirip SQL.
Buka → # Method SyntaxPelajari method syntax LINQ: extension method dan lambda expression yang menjadi bentuk asli setiap kueri C#.
Buka → # Filtering dan WherePelajari operator Where untuk menyaring elemen koleksi berdasarkan satu atau beberapa syarat dengan lambda predicate.
Buka → # Projection dan SelectPelajari operator Select untuk membentuk ulang setiap elemen kueri menjadi field tertentu atau tipe hasil baru.
Buka → # OrderingPelajari operator OrderBy, OrderByDescending, ThenBy, dan ThenByDescending untuk mengurutkan hasil kueri dengan satu atau beberapa kunci.
Buka → # GroupingPelajari operator GroupBy untuk mengelompokkan elemen berdasarkan kunci dan menghitung ringkasan per grup.
Buka → # JoiningPelajari operator Join untuk menggabungkan dua koleksi melalui kunci yang cocok dengan pola inner join.
Buka → # AggregationPelajari operator agregasi LINQ: Count, Sum, Min, Max, Average, dan Aggregate untuk meringkas koleksi menjadi satu nilai.
Buka → # Set OperationsPelajari operator himpunan LINQ: Distinct, Union, Intersect, dan Except untuk membandingkan dua urutan data.
Buka → # PartitioningPelajari operator partitioning LINQ: Skip, Take, SkipWhile, TakeWhile, dan Chunk untuk memotong urutan data.
Buka → # Quantifier OperationsPelajari operator kuantor LINQ: Any, All, dan Contains untuk menguji kecocokan elemen dengan jawaban boolean.
Buka → # Element OperationsPelajari operator elemen LINQ: First, Last, Single, dan ElementAt beserta perilaku default-nya saat data kosong.
Buka → # Conversion OperationsPelajari operator konversi LINQ: ToList, ToArray, ToDictionary, dan OfType untuk mengubah bentuk hasil kueri.
Buka → # Deferred ExecutionPelajari deferred execution: kueri LINQ baru berjalan saat diiterasi sehingga ikut melihat perubahan sumber data.
Buka → # Immediate ExecutionPelajari immediate execution: operator seperti Count, Sum, First, dan ToList yang langsung mengeksekusi kueri saat dipanggil.
Buka → # LINQ to ObjectsPelajari LINQ to Objects, provider LINQ untuk koleksi di memori seperti List, array, Dictionary, dan HashSet.
Buka → # LINQ dengan Entity Framework CorePelajari cara Entity Framework Core menerjemahkan kueri LINQ menjadi SQL, beserta batasan translasi yang perlu diwaspadai.
Buka → # LINQ PerformancePelajari dampak enumerasi berulang terhadap performa LINQ dan teknik materialisasi yang tepat.
Buka → # LINQ Best PracticesPelajari praktik terbaik menulis kueri LINQ: urutan operator, materialisasi, dan konsistensi gaya sintaks.
Buka →Bab 22 Nullable Reference Types
Pelajari pembungkus Nullable untuk tipe nilai, ditulis dengan tanda tanya seperti int?, untuk mewakili data numerik yang mungkin belum diisi.
Buka → # Nullable Reference Types IntroductionKenali nullable reference types: anotasi tanda tanya pada tipe referensi dan peringatan compiler yang menggantikan NullReferenceException di saat kompilasi.
Buka → # Nullable ContextAtur cakupan analisis nullability melalui properti Nullable pada project file dan direktif #nullable pada tingkat berkas.
Buka → # Nullable AnnotationsPelajari makna anotasi tanda tanya dan janji non-nullable pada variabel, field, property, dan parameter method.
Buka → # Null-State AnalysisPahami bagaimana compiler melacak keadaan mungkin-kosong dan pasti-terisi pada setiap baris program.
Buka → # Null-Conditional OperatorGunakan operator ?. dan ?[] untuk menjangkau anggota data yang mungkin kosong tanpa mencacah pemeriksaan if.
Buka → # Null-Coalescing OperatorKuasai operator ?? dan ??= untuk memberi nilai pengganti bila data yang mungkin kosong dibaca atau diisi sekali jalan.
Buka → # Null-Forgiving OperatorGunakan akhiran ! untuk menyatakan kepastian kita kepada compiler serta pahami risiko penggunaannya.
Buka → # Null PatternsKenali pemeriksaan null sebagai pattern matching: is null, is not null, dan arm null pada switch expression.
Buka → # Nullable Generic TypesPahami makna T? pada kode generik yang terikat constraint dan seluk-beluk pembungkus Nullable di baliknya.
Buka → # Nullability AttributesGunakan atribut dari namespace System.Diagnostics.CodeAnalysis untuk menyatakan ulang aturan nullability pada API yang rumit.
Buka → # Nullable API DesignRancang API yang jujur soal keboleh-kosongan melalui return type, pola Try, required member, dan atribut nullability.
Buka →Bab 23 Pattern Matching
Pelajari constant pattern untuk mencocokkan input dengan konstanta angka, teks, anggota enum, dan null.
Buka → # Type PatternGunakan type pattern untuk menguji tipe runtime sebuah nilai sekaligus mengikat nilainya ke variabel bertipe tersebut.
Buka → # Declaration PatternPahami declaration pattern is T x beserta aturan definite assignment dan bentuk negasi is not T x.
Buka → # Relational PatternCocokkan nilai terhadap batas angka atau karakter dengan relational pattern menggunakan operator <, >, <=, dan >=.
Buka → # Logical PatternGabungkan pola dengan operator and, or, dan not lengkap dengan aturan prioritas serta tanda kurung.
Buka → # Property PatternPeriksa isi property sebuah object secara bersarang dengan property pattern, termasuk extended property pattern C# 10.
Buka → # Positional PatternBedah object melalui Deconstruct dan cocokkan tiap posisi dengan positional pattern pada record dan class.
Buka → # List PatternCocokkan isi array, list, dan string elemen demi elemen dengan list pattern serta slice pattern C# 11.
Buka → # Var PatternGunakan var pattern untuk mencocokkan dan mengikat nilai apa pun, termasuk di dalam guard dan pola lain.
Buka → # Discard PatternGunakan pola _ untuk menampung sisa kasus, melengkapi keutuhan switch, dan menampung posisi yang tidak dibutuhkan.
Buka → # Switch ExpressionTelusuri mekanika switch expression bertumpu pola: keutuhan arm, when guard, tuple input, dan arm yang melempar exception.
Buka → # Pattern CombinatorsRangkai pola dengan and, or, not, tanda kurung, serta kombinasi lintas jenis pola pada satu expression.
Buka → # Pattern Matching Best PracticesKumpulkan praktik terbaik pattern matching: urutan arm, hierarki record, guard, dan batasan penggunaannya.
Buka →Bab 24 Advanced Types
Pelajari tuple type dari sisi lanjutan: nama elemen yang bertahan lintas method, tuple sebagai key dictionary, dan perbandingannya dengan System.Tuple generik lama.
Buka → # Anonymous TypesPelajari anonymous types pada skenario lanjutan: array sekali pakai, tipe bersarang, with-expression, dan batasannya sebagai tipe antar method.
Buka → # Dynamic TypeTelusuri mekanisme runtime binder di balik tipe dynamic: binding saat eksekusi, RuntimeBinderException, dan batasan yang perlu diantisipasi.
Buka → # Object TypeBedah tipe object dari sisi lanjutan: helper Equals dan ReferenceEquals, salinan dangkal MemberwiseClone, serta biaya alokasi yang menyertainya.
Buka → # Nint dan NuintPelajari nint dan nuint: tipe bilangan bulat berukuran mengikuti platform, konversinya dengan IntPtr, dan kapan pemakaiannya tepat.
Buka → # Native-Sized IntegersPahami kedudukan baru nint dan nuint sejak C# 11 sebagai native-sized integers yang sah di konteks generik, termasuk antarmuka generic math.
Buka → # Function PointersKenali function pointer C# 9: alamat method tanpa alokasi delegate, ditulis delegate* dan dijalankan di dalam konteks unsafe.
Buka → # Ref Locals dan Ref ReturnsPelajari ref local dan ref return: method yang mengembalikan alias ke elemen data sehingga pemanggil membaca dan menulis langsung ke sumbernya.
Buka → # Ref FieldsPelajari ref fields C# 11: field ref struct yang menyimpan referensi ke data lain, dengan aturan escape yang menjaga keabsahan referensinya.
Buka → # Scoped RefPelajari modifier scoped C# 11 untuk membatasi rentang hidup referensi pada parameter dan field ref struct di kode tingkat rendah.
Buka → # Required MembersPerluas modifier required ke field, constructor beratribut SetsRequiredMembers, dan perilaku with pada record yang berisi anggota required.
Buka → # Init AccessorsBedah aksesor init dari sisi internal: izin menulis field readonly, kerja sama dengan with pada struct, dan modreq IsExternalInit.
Buka → # Primary ConstructorsPelajari primary constructors C# 12 untuk class dan struct: parameter yang ditangkap, pewarisan dengan base, dan bedanya dengan record.
Buka → # Collection ExpressionsPerluas collection expressions ke tipe target lanjutan: argumen ReadOnlySpan, spread ganda, dan bentuk bersarang untuk jagged array.
Buka → # Target-Typed NewPelajari target-typed new C# 9: new() tanpa mengulang nama tipe pada deklarasi lokal, field, argumen method, dan ekspresi kondisional.
Buka → # Alias Any TypePelajari perluasan using alias C# 12 yang kini mencakup tuple, array, dan tipe komposit lain, beserta batas yang ditegakkan compiler.
Buka → # Interceptors dan Fitur EksperimentalKenali dua fitur C# 12 berstatus khusus: attribute Experimental untuk menandai API belum stabil dan interceptors yang menulis ulang pemanggilan method.
Buka → # Fitur Bahasa Berdasarkan VersiPeta ringkas fitur bahasa C# 8 sampai C# 13 beserta tempatnya dibahas di course ini, dan cara mengatur LangVersion pada project.
Buka →Bab 25 Memory Management
Kenali dua area memori utama runtime .NET, yaitu call stack untuk data sementara dan managed heap untuk objek yang dikelola garbage collector.
Buka → # Value dan Reference SemanticsPahami perbedaan semantik nilai dan semantik referensi di C# serta dampaknya terhadap alokasi memori dan perilaku program.
Buka → # Object AllocationLihat bagaimana operator new mengalokasikan objek di managed heap dan cara mengukur jumlah byte yang dialokasikan dengan GC.GetAllocatedBytesForCurrentThread.
Buka → # Reference LifetimePelajari bagaimana usia objek ditentukan oleh rujukan yang masih terpakai dan bagaimana GC mengklaim kembali objek tanpa rujukan.
Buka → # Garbage CollectionKenali cara garbage collector menemukan objek tanpa rujukan dan mengklaim kembali memorinya, lengkap dengan pengukuran hitungan koleksi.
Buka → # Large Object HeapPelajari Large Object Heap (LOH), area khusus di managed heap untuk objek berukuran 85.000 byte ke atas, beserta implikasinya.
Buka → # Generations dan GCPahami konsep generasi 0, 1, dan 2 pada garbage collector .NET serta proses promosi objek yang selamat dari siklus GC.
Buka → # FinalizerPelajari finalizer sebagai jaring pengaman terakhir runtime, beserta keterbatasannya yang serius pada waktu eksekusi dan beban GC.
Buka → # WeakReferenceGunakan WeakReference untuk merujuk objek tanpa menahannya dari pengklaiman GC, misalnya pada cache yang boleh dibuang kapan saja.
Buka → # Memory PressureUkur tekanan memori dari laju alokasi managed dan informasikan pemakaian memori unmanaged kepada GC melalui GC.AddMemoryPressure.
Buka → # Allocation ReductionTeknik menekan jumlah alokasi managed: StringBuilder untuk penyambungan, span dan MemoryExtensions untuk pemrosesan tanpa alokasi.
Buka → # Memory Management Best PracticesRangkum praktik terbaik pengelolaan memori di C#: ukur dulu, andalkan using untuk resource, dan jaga rujukan agar tetap ramping.
Buka →Bab 26 Garbage Collection
Pelajari cara kerja dasar garbage collector .NET: root, penandaan, pengklaiman, dan API GC yang dapat dipanggil dari kode.
Buka → # GC GenerationsDalami generasi 0, 1, dan 2: budget alokasi, frekuensi koleksi, dan promosi objek yang selamat.
Buka → # Workstation vs Server GCBandingkan mode workstation GC dan server GC, termasuk cara mengaktifkannya lewat csproj dan ciri pemeriksaannya di runtime.
Buka → # Background GCPelajari background GC yang menjalankan koleksi generasi 2 secara paralel dengan thread aplikasi agar jeda panjang berkurang.
Buka → # GC Latency ModesAtur kepekaan GC terhadap jeda melalui GCLatencyMode: Interactive, Batch, SustainedLowLatency, dan NoGCRegion.
Buka → # GC ConfigurationKonfigurasikan perilaku GC melalui csproj dan runtimeconfig.json, lalu ukur pengaruhnya dengan GC.GetTotalMemory.
Buka → # GC DiagnosticsKenali alat diagnosis GC .NET: dotnet-counters untuk metrik langsung, dotnet-gcdump untuk isi heap, dan alur membacanya.
Buka → # FinalizationBedah mekanisme finalization di runtime .NET: antrean finalizer, proses promosi ganda, dan pola Dispose yang benar dengan GC.SuppressFinalize.
Buka → # Weak ReferencesGunakan WeakReference generik untuk cache yang ringan dan ConditionalWeakTable untuk data tambahan yang mengikuti usia kuncinya.
Buka → # Menganalisis Tekanan MemoriIkuti alur praktis menganalisis tekanan memori: ukur alokasi per batch, hitung frekuensi GC, lalu perbaiki dan bandingkan hasilnya.
Buka →Bab 27 Resource Management
Bab 28 File System dan Streams
Kenali dua class statis File dan Directory di namespace System.IO untuk memeriksa, menyalin, dan menghapus berkas serta folder.
Buka → # Path dan Path.CombinePelajari class Path untuk merakit dan membedah string path lintas platform tanpa menyisipkan pemisah folder secara manual.
Buka → # Membaca File TeksBedah tiga method pembacaan teks pada class File: ReadAllText, ReadAllLines, dan ReadLines beserta perbedaan pemakaian memorinya.
Buka → # Menulis File TeksGunakan WriteAllText untuk menimpa isi berkas dan pasangan AppendAllText serta AppendAllLines untuk menambah baris baru.
Buka → # Membaca File BinerBaca data mentah tanpa proses decoding lewat ReadAllBytes dan BinaryReader, lengkap dengan cara menampilkannya sebagai heksadesimal.
Buka → # Menulis File BinerSimpan tipe dasar dalam bentuk byte aslinya dengan BinaryWriter, lalu baca kembali dengan BinaryReader dalam urutan yang sama.
Buka → # Stream dan StreamReaderPahami abstraksi Stream sebagai aliran byte, lalu gunakan StreamReader untuk membacanya baris demi baris.
Buka → # StreamWriterTulis teks ke stream secara bertahap lewat buffer StreamWriter, baik untuk menimpa isi lama maupun menambah di akhir berkas.
Buka → # MemoryStreamGunakan MemoryStream sebagai stream yang tersimpan penuh di memori untuk menguji kode stream tanpa menyentuh disk.
Buka → # FileStreamKendalikan pembukaan berkas di tingkat rendah dengan FileMode dan FileAccess, lalu tulis dan baca byte lewat FileStream.
Buka → # Buffered StreamKurangi jumlah permintaan disk dengan menyisipkan BufferedStream di antara kode dan stream dasar.
Buka → # Asynchronous File IOBebaskan thread dari menunggu disk dengan File.ReadAllTextAsync, WriteAllTextAsync, dan ReadLineAsync.
Buka → # File WatcherBereaksi terhadap perubahan berkas secara otomatis dengan FileSystemWatcher, lengkap dengan batas waktu pemantauan lewat CancellationToken.
Buka → # Temporary FilesSimpan data sekali pakai di folder temporer sistem lewat Path.GetTempPath, Path.GetTempFileName, dan Directory.CreateTempSubdirectory.
Buka → # File PermissionsAtur izin berkas Unix lewat UnixFileMode di .NET 7+, dengan catatan singkat model ACL Windows lewat FileSecurity.
Buka → # Penanganan Kesalahan FileTangani kegagalan operasi I/O lewat try-catch dengan memilih exception yang tepat: FileNotFoundException, DirectoryNotFoundException, dan UnauthorizedAccessException.
Buka →Bab 29 Serialization dan Deserialization
Pahami masalah inti yang diselesaikan serialization: mengubah objek di memori menjadi aliran byte agar dapat dikirim atau disimpan, lalu mengembalikannya dengan deserialization.
Buka → # System.Text.JsonKenali System.Text.Json, serializer JSON bawaan .NET, beserta tiga API utamanya untuk serialisasi, deserialisasi, dan pembacaan dokumen JSON.
Buka → # JSON SerializationSerialisasi object C# menjadi string JSON dengan JsonSerializer, termasuk perilaku default penamaan properti dan escaping karakter khusus.
Buka → # JSON DeserializationMengubah teks JSON kembali menjadi object C# dengan JsonSerializer.Deserialize serta memahami pencocokan nama properti yang sensitif huruf besar-kecil.
Buka → # JSON Options dan KonverterMenyesuaikan perilaku System.Text.Json melalui JsonSerializerOptions: naming policy, indentasi, dan opsi lain yang paling sering dipakai.
Buka → # Custom JSON ConverterMenulis JsonConverter<T> sendiri untuk mengatur cara tipe kustom dibaca dan ditulis, termasuk validasi nilai saat deserialization.
Buka → # XML SerializationSerialisasi object menjadi XML dengan XmlSerializer, termasuk syarat class yang boleh diserialisasi dan bentuk keluaran defaultnya.
Buka → # XmlReader dan XmlWriterMenulis dan membaca XML secara streaming dengan XmlWriter dan XmlReader tanpa memetakan dokumen ke class.
Buka → # CSV Data HandlingMemproses CSV secara manual dengan parser sederhana dan memahami jebakan string.Split ketika koma berada di dalam tanda kutip.
Buka → # Binary Data FormatsMenulis dan membaca data biner dengan BinaryWriter dan BinaryReader, termasuk memahami urutan tipe yang menentukan panjang hasil.
Buka → # Versioning Data ContractMenjaga serialisasi tetap aman ketika schema berubah: properti baru, properti hilang, dan penegakan properti wajib dengan kata kunci required.
Buka → # Polymorphic SerializationMenyerialisasi hierarki class dengan atribut JsonPolymorphic dan JsonDerivedType, termasuk peran type discriminator saat deserialization.
Buka → # Serialization SecurityRisiko keamanan deserialisasi data dari pihak tidak dipercaya, penanganan JsonException, dan status BinaryFormatter di .NET 9.
Buka →Bab 30 Date, Time, dan Globalization
Mengenal struct DateTime untuk menyimpan titik waktu: konstruktor, properti kalender, dan makna nilai Kind.
Buka → # DateTimeOffsetMenyimpan titik waktu beserta offsetnya terhadap UTC menggunakan DateTimeOffset agar satu momen terwakili dengan unik.
Buka → # DateOnly dan TimeOnlyMemakai DateOnly dan TimeOnly untuk tanggal dan jam murni tanpa komponen waktu atau tanggal yang mengganggu.
Buka → # TimeSpanMerepresentasikan durasi dengan TimeSpan: pembuatan, aritmetika, dan perbedaan properti TotalMinutes dengan komponen Minutes.
Buka → # TimeZoneBekerja dengan zona waktu melalui TimeZoneInfo: mencari zona Asia/Jakarta, konversi dari UTC, dan memeriksa offset resminya.
Buka → # UTC dan Local TimeMemahami perbedaan UTC dan waktu lokal, serta cara konversi yang deterministik dengan zona waktu eksplisit.
Buka → # Format dan Parsing DateMengubah DateTime menjadi teks dengan pola format dan menguraikan teks kembali dengan ParseExact serta TryParseExact secara culture-invariant.
Buka → # CultureInfoMengenal CultureInfo sebagai wadah aturan budaya untuk format tanggal dan angka, dengan perbandingan id-ID dan InvariantCulture.
Buka → # GlobalizationMenyiapkan aplikasi untuk banyak budaya dengan CurrentCulture: satu kode, tampilan yang menyesuaikan aturan tiap culture.
Buka → # LocalizationMenyediakan teks terjemahan per bahasa dengan strategi pemilihan pesan dan fallback culture yang menjatuhkan diri ke bahasa dasar.
Buka → # Number FormattingMemformat dan mengurai angka dengan penentu format N dan C, serta memahami pembalikan pemisah ribuan dan desimal antar culture.
Buka → # Sorting dan CollationMengurutkan teks dengan pembanding Ordinal dan pembanding culture, serta memahami collation sebagai aturan urutan abjad.
Buka → # Internationalization Best PracticesMerangkum praktik internasionalisasi: simpan dengan format invariant, konversi zona secara eksplisit, dan tampilkan dengan culture pengguna.
Buka →Bab 31 Asynchronous Programming
Memahami perbedaan model eksekusi sinkron dan asinkron serta alasan operasi yang banyak menunggu sebaiknya ditulis asinkron.
Buka → # Task dan Task<T>Mengenal Task sebagai janji pekerjaan asinkron dan Task<T> untuk pekerjaan yang mengembalikan nilai.
Buka → # Async dan AwaitMemahami cara kata kunci async dan await membagi method menjadi bagian sebelum dan sesudah titik tunggu.
Buka → # Task Return TypesMemilih return type yang tepat untuk method asinkron: Task, Task<T>, ValueTask<T>, dan kasus async void yang sebaiknya dihindari.
Buka → # Task CompositionMerangkai beberapa operasi asinkron menjadi satu alur dengan await berantai dan lanjutan ContinueWith.
Buka → # Task.WhenAll dan WhenAnyMenjalankan banyak task serentak dengan Task.WhenAll dan merespons task pertama yang selesai dengan Task.WhenAny.
Buka → # Cancellation TokenMenghentikan operasi asinkron secara terkoordinasi dengan CancellationTokenSource dan CancellationToken.
Buka → # Exception dalam AsyncMemahami cara exception asinkron tersimpan di dalam Task dan dilempar ulang saat await, termasuk perilaku Task.WhenAll.
Buka → # Async StreamsMengonsumsi data yang datang seiring waktu dengan await foreach dan IAsyncEnumerable<T>.
Buka → # IAsyncEnumerableMembongkar anatomi IAsyncEnumerable<T> dan IAsyncEnumerator<T> di balik await foreach.
Buka → # Async IteratorsMenulis produsen data asinkron dengan yield return di dalam method async yang mengembalikan IAsyncEnumerable<T>.
Buka → # Asynchronous File IOMembaca dan menulis berkas secara asinkron dengan API File async dan FileStream useAsync.
Buka → # Asynchronous HTTPMemanggil API HTTP tanpa menahan thread menggunakan HttpClient dan pasangan method asinkronnya.
Buka → # Synchronization ContextMemahami ke mana eksekusi kembali setelah await dan peran SynchronizationContext serta ConfigureAwait(false).
Buka → # Deadlock dan Common MistakesMemahami kebuntuan klasik akibat .Result dan .Wait() pada aplikasi UI secara konseptual, beserta daftar kesalahan umum asinkron.
Buka → # Async Best PracticesKumpulan praktik terbaik menulis kode asinkron: async sampai ke atas, teruskan CancellationToken, dan hindari pemblokiran.
Buka → # Asynchronous PerformanceMenilai performa kode asinkron dari tingkat konkurensi dan alokasi, serta keputusan teknis yang memengaruhinya.
Buka →