Dokumentasi C#
Referensi C# yang ringkas dan penuh contoh. Baca konsepnya, lihat kodenya, lalu praktikkan di perjalanan Coddy.
Mulai kursusMemulai
- Apa Itu C#C# adalah bahasa serbaguna bertipe statis dari Microsoft yang berjalan di .NET. Untuk apa C# dipakai, apa hubungannya dengan .NET, apa yang ditambahkan setiap versi, dan bagaimana sebuah program C# disusun.
- Hello WorldProgram C# pertamamu, baris demi baris: method Main, Console.WriteLine dan Write, membaca input dengan Console.ReadLine, komentar, membuat dan menjalankan proyek dengan dotnet CLI, serta top-level statements.
- C# vs JavaC# dan Java terlihat mirip dan memecahkan masalah yang serupa. Perbedaan sebenarnya ada pada property, tipe value, generic, LINQ versus stream, async, exception, dan ekosistem di sekitarnya. Perbandingan berdampingan lengkap dengan kode.
- C# vs C++C# adalah bahasa managed dengan garbage collector; C++ di-compile menjadi kode native dan memberimu kendali manual atas memori. Begini perbedaan itu terlihat pada keamanan, performa, game engine, model build, dan seberapa sulit masing-masing dipelajari.
- Namespace dan usingCara namespace C# mengatur tipe dan cara directive using meng-import-nya: alias, using static, nama lengkap (fully qualified name), memperbaiki referensi yang ambigu, global using dan file-scoped namespace.
Dasar
- VariabelCara mendeklarasikan dan mengisi variabel di C#, kapan var cocok dipakai dan kapan tidak, cara kerja scope, perbedaan const, readonly dan static readonly, konvensi penamaan, serta error variabel yang belum diisi.
- Tipe DataSetiap tipe bawaan C# lengkap dengan ukuran, rentang, dan suffix literalnya, perbedaan tipe value dan tipe reference, kenapa decimal adalah tipe untuk uang, integer overflow dan checked, serta nilai default.
- String ke IntCara mengonversi string ke int di C# dengan int.Parse, int.TryParse dan Convert.ToInt32, cara kerja cast implisit dan eksplisit, kenapa cast dari double memotong desimal, operator as dan is, dan kenapa "1.5" bisa terbaca sebagai 15.
- OperatorOperator C# beserta perilaku pastinya: pembagian bilangan bulat, operator modulo dengan bilangan negatif, increment dan compound assignment, perbandingan, logika short-circuit, operator bitwise, operator null, dan tabel prioritas operator.
- StringCara kerja string di C#: sifat immutable, Length dan indeks, membandingkan dengan ==, Equals, dan string.Compare, escape character, string verbatim @ dan teks multiline, raw string literal, pengecekan null dan kosong, serta perulangan pada setiap karakter.
- SubstringCara kerja String.Substring di C#: argumen indeks awal dan panjang, ArgumentOutOfRangeException dan cara menghindarinya, mengambil teks di sekitar hasil IndexOf, mengambil n karakter pertama atau terakhir, dan operator range dari C# 8.
- String InterpolationCara kerja string interpolation $"..." di C#: ekspresi di dalam kurung kurawal, format specifier seperti F2, N0, C, D5, dan X, alignment untuk tabel, escape kurung kurawal, string.Format dan composite formatting, interpolated string verbatim dan raw, serta pemformatan untuk culture tertentu.
- Method StringMethod String yang kamu pakai setiap hari di C#: Split dengan beberapa pemisah dan option, Replace, Contains dan pencarian yang tidak peka huruf besar kecil, IndexOf dan LastIndexOf, StartsWith dan EndsWith, Trim, ToUpper dan ToLower, PadLeft, Join, Concat, dan membalik string.
- StringBuilderKenapa penggabungan string berulang di dalam perulangan itu lambat di C#, dan bagaimana StringBuilder mengatasinya: Append, AppendLine, AppendFormat, Insert, Remove, Replace, capacity, serta kapan penggabungan biasa atau string.Join adalah pilihan yang lebih baik.
- Angka AcakCara membuat angka acak di C# dengan class Random: Next dan batas atasnya yang eksklusif, double acak dalam rentang tertentu, seed untuk hasil yang bisa diulang, memilih elemen acak, mengacak list, jebakan new Random di dalam perulangan, dan angka yang aman secara kriptografis.
- DateTimeBekerja dengan tanggal dan waktu di C#: membuat nilai DateTime, Now vs UtcNow vs Today, menambah hari dan bulan, mengurangkan untuk mendapat TimeSpan, TotalHours vs Hours, membandingkan tanggal, DayOfWeek, parsing dengan ParseExact dan TryParse, DateTimeOffset, dan DateOnly.
- Format DateTimeCara memformat DateTime menjadi string di C#: format string standar (d, D, o, s, u, t), pola custom seperti yyyy-MM-dd HH:mm:ss, tabel specifier lengkap, cara culture mengubah output, round-trip ISO 8601 dengan "o", dan kesalahan mm vs MM serta hh vs HH.
Alur Kontrol
- if elseCara kerja if, else if dan else di C#: kenapa kondisi harus bertipe bool, menggabungkan pemeriksaan dengan &&, || dan !, kapan kurung kurawal itu penting, guard clause sebagai ganti percabangan yang bersarang dalam, serta bug = vs == dan titik koma yang nyasar.
- Pernyataan SwitchCara kerja pernyataan switch di C#: switch pada nilai int, string, char, dan enum, kenapa setiap case butuh break (error CS0163), menumpuk label case untuk beberapa nilai, goto case, default, kepekaan huruf besar kecil pada string, dan label case berpola dengan when.
- Ekspresi SwitchEkspresi switch dari C# 8 mengubah sebuah nilai menjadi hasil lewat cabang berpola, tanpa case dan break. Sintaks, discard _, pola property, tuple, dan relasional, and/or/not, guard when, peringatan exhaustiveness dan SwitchExpressionException, dengan padanan C# 7 yang bisa dijalankan.
- Operator TernaryOperator kondisional C# condition ? a : b memilih salah satu dari dua nilai. Cara evaluasinya, kenapa kedua cabang butuh tipe yang sama (CS0173) dan cast yang memperbaikinya, ternary bersarang, tanda kurung di interpolasi string, serta kapan ?? dan ?. lebih tepat dipakai.
- for LoopCara kerja for loop di C#: initializer, kondisi, dan iterator, menghitung mundur dan melompat dengan langkah tertentu, beberapa variabel loop, perulangan pada array lewat index, nested loop, for(;;), serta bug off-by-one dan menghapus item saat iterasi.
- Perulangan foreachCara kerja foreach di C#: perulangan pada array, list, string dan dictionary (KeyValuePair dan dekonstruksi), cara mendapatkan indeks, kenapa variabel loop hanya bisa dibaca, InvalidOperationException "Collection was modified" beserta cara memperbaikinya, dan apa yang dibutuhkan sebuah tipe agar bisa dipakai di foreach.
- Perulangan whileCara kerja perulangan while dan do-while di C#: kondisi yang diperiksa sebelum atau sesudah isi loop, membaca input sampai kata penanda atau sampai input habis, while (true) dengan break, dan kesalahan infinite loop yang sering menjebak.
- break dan continueCara kerja break, continue, dan goto di C#: menghentikan loop lebih awal, melewati satu iterasi, break di dalam switch, tiga cara keluar dari nested loop (flag, goto, atau method dengan return), dan bug infinite loop karena continue di dalam while.
Method dan Delegate
- MethodCara mendeklarasikan dan memanggil method di C#: tipe kembalian dan void, parameter, expression-bodied method, mengembalikan beberapa nilai dengan tuple, overloading, array params, method static vs instance, method Main, rekursi dan local function.
- Optional ParameterCara kerja optional parameter dan named argument di C#: nilai default dan aturan konstanta compile-time, urutan parameter, melewati argumen lewat namanya, optional parameter vs overload, atribut caller info, dan jebakan versioning karena nilai default ditanam di kode pemanggil.
- ref dan outCara kerja parameter ref, out, dan in di C#: meneruskan variabel itu sendiri, bukan salinannya, out untuk hasil tambahan dan pola TryParse, out var, parameter in yang read-only, aturan definite assignment, dan apa yang berubah saat argumennya berupa reference type.
- Lambda ExpressionCara kerja lambda expression di C#: sintaks => dalam semua bentuknya, menyimpan lambda di Func dan Action, mengirimnya ke method dan LINQ, statement lambda, closure atas variabel yang ditangkap, dan bug penangkapan variabel di perulangan for yang tidak terjadi di foreach.
- DelegateApa itu delegate di C# dan cara memakainya: mendeklarasikan tipe delegate, membuatnya dari method, lambda, atau anonymous method, memanggilnya, delegate sebagai callback, multicast delegate dengan += dan -=, pengecekan null dengan ?.Invoke, dan hubungan delegate dengan Func, Action, dan event.
- Func dan ActionCara kerja Func dan Action di C#: Func<T, TResult> untuk fungsi yang mengembalikan nilai, Action<T> untuk fungsi yang tidak mengembalikan nilai, Predicate dan Comparison, mengirim dan mengembalikan fungsi, dictionary berisi perintah, lambda async, dan kapan sebaiknya kamu mendeklarasikan delegate sendiri.
- EventCara kerja event di C#: mendeklarasikan event dengan EventHandler dan EventHandler<T>, class EventArgs buatan sendiri, subscribe dan unsubscribe dengan += dan -=, memunculkan event dengan aman lewat ?.Invoke, kenapa event lebih baik daripada field delegate public, dan memory leak karena lupa unsubscribe.
- Extension MethodCara kerja extension method di C#: method static di dalam class static dengan this pada parameter pertama, memanggilnya seperti method instance, memperluas string, enum, dan IEnumerable<T>, bagaimana LINQ dibangun darinya, kenapa method instance selalu menang, receiver null, dan directive using yang dibutuhkannya.
Koleksi dan LINQ
- ArrayArray C# adalah blok elemen bertipe sama dengan ukuran tetap. Pelajari cara mendeklarasikan dan menginisialisasi array, membaca Length, mengurutkan dan mencari dengan class Array, menyalinnya dengan aman, serta memakai array 2D dan jagged array.
- ListList<T> adalah array yang bisa bertambah panjang di C#. Pelajari cara membuat list, menambah dan menyisipkan item, menghapus berdasarkan nilai, indeks atau kondisi, mencari dengan Contains dan Find, mengurutkan berdasarkan property, dan menghindari error karena mengubah list di dalam foreach.
- DictionaryDictionary<TKey, TValue> memetakan key ke value dengan pencarian yang cepat. Pelajari cara menambah dan memperbarui entri, membaca dengan aman lewat TryGetValue, melakukan iterasi pada entri KeyValuePair, menghitung kemunculan, mengabaikan huruf besar-kecil pada key, dan menjaga key tetap terurut dengan SortedDictionary.
- HashSetHashSet<T> menyimpan item unik dan menjawab Contains dalam waktu konstan. Pelajari bagaimana Add memberi tahu adanya duplikat, cara menghapus duplikat dari sebuah list, cara melakukan union, intersection dan selisih pada set, serta cara membuat set membandingkan objekmu sendiri berdasarkan nilainya.
- QueueQueue<T> adalah collection first in, first out: item keluar sesuai urutan kedatangannya. Pelajari Enqueue, Dequeue, dan Peek, exception saat queue kosong dan TryDequeue, breadth first search dengan queue, serta kapan memakai ConcurrentQueue atau PriorityQueue.
- StackStack<T> adalah collection last in, first out: item yang terakhir ditambahkan keluar lebih dulu. Pelajari Push, Pop, dan Peek, exception saat stack kosong dan TryPop, kenapa enumerasi stack berjalan dalam urutan terbalik, serta dua pemakaian klasik: riwayat undo dan pengecekan kurung yang seimbang.
- TupleTuple C# mengelompokkan beberapa nilai menjadi satu tanpa perlu mendeklarasikan tipe. Pelajari sintaks value tuple, elemen bernama, mengembalikan banyak nilai dari method, dekonstruksi dengan var (a, b), tuple sebagai key dictionary, dan perbedaan ValueTuple dengan System.Tuple yang lebih lama.
- LINQLINQ menambahkan operator query ke setiap koleksi di C#. Pelajari method syntax dan query syntax, memfilter dengan Where, memproyeksikan dengan Select, mengurutkan dengan OrderBy dan ThenBy, mengelompokkan dengan GroupBy, jebakan First vs FirstOrDefault, agregat, dan bagaimana deferred execution mengubah kapan query-mu dijalankan.
- IEnumerable dan yieldIEnumerable<T> adalah interface di balik foreach dan LINQ, dan yield return adalah cara termudah untuk mengimplementasikannya. Pelajari hubungan IEnumerable dengan ICollection dan List, cara method iterator berjalan langkah demi langkah, yield break, urutan tak terbatas, dan jebakan lazy evaluation.
Class dan Tipe
- Class dan ObjectCara mendeklarasikan class di C#, memberinya field dan method, membuat object dengan new, dan apa artinya class adalah tipe reference: object yang dipakai bersama, null dan NullReferenceException, ToString, serta object initializer.
- ConstructorCara kerja constructor di C#: default constructor implisit dan kapan ia hilang, constructor berparameter dan overloading, chaining dengan this(...) dan base(...), urutan eksekusinya, constructor static dan private, serta primary constructor di C# 12.
- PropertyCara kerja property di C#: accessor get dan set di atas backing field, auto-property, private set dan property get-only, property terhitung, validasi di setter, serta kata kunci init dan required dari C# 9 dan 11.
- Kata Kunci staticArti static di C#: member yang dimiliki tipe, bukan object, state yang dipakai bersama oleh semua instance, static method dan static class, static constructor, const vs static readonly, using static, dan error CS0120.
- Access ModifierEnam access modifier di C# (public, private, protected, internal, protected internal, private protected), apa yang diizinkan masing-masing, default-nya saat kamu tidak menulis apa pun, dan error compiler yang muncul karenanya.
- InheritanceCara kerja pewarisan class di C#: membuat turunan dengan titik dua, apa yang diwariskan dan apa yang tidak, memanggil base class dengan base, virtual dan override, menyembunyikan dengan new (dan output yang mengejutkan semua orang), sealed, polimorfisme, serta casting naik dan turun dalam hierarki.
- Abstract ClassApa itu abstract class di C#: class dasar yang tidak bisa dibuat instance-nya dan bisa mendeklarasikan member abstract yang wajib diimplementasikan oleh class turunannya. Membahas method dan property abstract, constructor, pola template method, dan kapan sebaiknya memilih interface.
- InterfaceCara kerja interface di C#: mendeklarasikannya, mengimplementasikannya di class dan struct, memakai interface sebagai tipe, mengimplementasikan beberapa interface sekaligus, implementasi eksplisit, interface framework yang paling sering kamu implementasikan (IComparable<T>, IEnumerable<T>, IDisposable), dan default interface method dari C# 8.
- StructCara kerja struct di C#: semantik nilai dan penyalinan saat assignment, error saat mengubah elemen List<T>, aturan constructor, kesamaan, boxing, readonly struct dan record struct, serta perbandingan struct vs class beserta panduan kapan struct menjadi pilihan yang tepat.
- EnumCara kerja enum di C#: mendeklarasikan konstanta bernama, nilai integer di baliknya dan casting, mengubah enum menjadi string dan string menjadi enum dengan Parse dan TryParse, menampilkan semua nilainya, [Flags] dengan operator bitwise dan HasFlag, switch pada enum, dan menangani nilai yang tidak terdefinisi.
- RecordApa itu record di C# (C# 9 dan sesudahnya): sintaks posisional, member yang dibuat compiler, kesamaan berdasarkan nilai, salinan non-destruktif dengan with, ToString bawaan, record struct dari C# 10, pewarisan antar-record, dan class padanannya yang ditulis manual.
- GenericsCara kerja generics di C#: menulis class dan method generik dengan parameter tipe, inferensi tipe, constraint dengan where (class, struct, new(), base class, interface), default(T), member static per tipe, dan kovarians dengan IEnumerable<out T>.
- Nullable TypeSemua tentang null di C#: nullable value type (int?, Nullable<T>) dengan HasValue, Value dan GetValueOrDefault, operator null-coalescing ?? dan ??=, operator null-conditional ?., pemeriksaan null, dan nullable reference type (string?) dari C# 8.
- Pattern MatchingCara kerja pattern matching di C#: operator is dengan pola tipe dan pola konstanta, pernyataan switch dengan pola di case dan when, ekspresi switch, pola property, tuple, dan posisional, pola relasional dan logika (and, or, not), pola list, serta versi C# yang menambahkan masing-masing.
Exception
- Try Catchtry, catch dan finally adalah cara C# menangani exception. Pelajari bagaimana exception naik lewat call stack, cara menangkap tipe exception tertentu dengan urutan yang benar, menyaring dengan when, membersihkan resource di finally, melempar ulang dengan throw; tanpa kehilangan stack trace, dan exception mana yang sebaiknya tidak ditangkap.
- Melempar ExceptionCara dan kapan melempar exception di C#. Pelajari pernyataan throw, tipe exception bawaan yang cocok untuk tiap kesalahan, throw expression dengan ?? dan ?:, helper ThrowIfNull, dan cara menulis class exception kustom dengan datanya sendiri dan inner exception.
- Pernyataan UsingPernyataan using menjamin Dispose dipanggil pada file, stream, koneksi dan objek IDisposable lainnya, bahkan saat exception dilempar. Pelajari hasil kompilasinya, urutan objek di-dispose, using declaration di C# 8, dan cara mengimplementasikan IDisposable di class milikmu sendiri.
Async dan Thread
- Async Awaitasync dan await membuat kode C# bisa menunggu operasi yang lambat tanpa memblokir thread. Pelajari cara method async berjalan, Task dan Task<T>, menjalankan operasi yang saling lepas secara bersamaan dengan Task.WhenAll, exception di kode async, dan kenapa async void dan .Result menyebabkan bug dan deadlock.
- TaskTask adalah satuan pekerjaan asynchronous dan paralel di .NET. Pelajari Task.Run untuk pekerjaan CPU-bound, membaca hasil, menggabungkan task dengan WhenAll dan WhenAny, continuation, pembatalan dengan CancellationToken, perbedaan Task dan Thread, serta kapan Parallel.For lebih cocok.
- LockPernyataan lock membuat hanya satu thread dalam satu waktu yang bisa menjalankan sebuah blok kode. Lihat bagaimana race condition merusak sebuah penghitung, perbaiki dengan lock, pelajari objek mana yang dipakai untuk lock, pakai Interlocked untuk penghitung sederhana, hindari deadlock karena urutan lock, dan pakai SemaphoreSlim saat kode di dalamnya melakukan await.
- TimerC# punya beberapa class timer dan perilakunya berbeda. Pelajari kapan memakai System.Threading.Timer, System.Timers.Timer, PeriodicTimer atau timer UI, cara memulai dan menghentikannya, kenapa callback berjalan di thread pool dan bisa tumpang tindih, kenapa timer harus tetap direferensikan, dan cara mengukur waktu yang berlalu dengan Stopwatch.
File, JSON, dan Lainnya
- Membaca dan Menulis FileCara menulis ke file dan membaca file di C#: File.WriteAllText, ReadAllText, AppendAllText, WriteAllLines, dan ReadAllLines untuk seluruh isi file, StreamWriter dan StreamReader untuk file besar, path dengan Path.Combine, folder, encoding, dan exception yang harus ditangani kode file.
- JSONCara bekerja dengan JSON di C# memakai System.Text.Json: JsonSerializer.Serialize dan Deserialize, output camelCase dan berindentasi, atribut seperti JsonPropertyName dan JsonIgnore, enum sebagai string, membaca JSON tanpa class lewat JsonDocument dan JsonNode, error, dan perbandingannya dengan Newtonsoft.Json.
- RegexCara memakai regular expression di C# dengan System.Text.RegularExpressions: IsMatch, Match, dan Matches, group bernomor dan bernama, Replace dengan substitusi dan lambda, Split, RegexOptions, string verbatim untuk pola, validasi input, timeout, dan attribute GeneratedRegex dari .NET 7.
- Reflection dan AttributeCara kerja reflection di C#: object Type dari typeof dan GetType, membaca dan mengisi property, memanggil method lewat namanya, membuat instance, serta attribute: yang bawaan seperti Obsolete, membuat attribute sendiri, dan membacanya saat program berjalan. Ditambah biaya yang dibawa reflection.