0Pricing
C# Academy · Pelajaran

Tipe referensi nullable (pemahaman) & anotasi (pola C# 6)

C# 6 tidak memiliki tipe referensi nullable (string?). Pelajari penanganan null yang aman: pemeriksaan masukan, dokumentasi yang jelas, helper Require.NotNull, serta perbedaannya dengan Nullable untuk tipe nilai.

Tipe referensi nullable (pemahaman) & anotasi (pola C# 6) adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 3 pelajaran total.

Pemahaman NRT & mekanisme cadangan

Gagasan: Jenis referensi yang dapat bernilai null (misalnya, string?) menambahkan pemeriksaan kompiler pada C# versi yang lebih baru.

  • C# 6 tidak mendukung string?
  • Gunakan pemeriksaan, dokumentasi yang jelas, dan metode pembantu sederhana
  • Kembalikan nilai yang tidak null secara bawaan

Lindungi dari nilai null

Tambahkan pemeriksaan ArgumentNullException untuk parameter jenis referensi, lalu perlakukan nilainya sebagai tidak null.

using System;

public static class Greeter
{
  // Contract: name must not be null (C# 6 has no string? to enforce)
  public static string Hello(string name)
  {
    if (name == null) throw new ArgumentNullException("name"); // guard
    return "Hello " + name.ToUpper(); // safe after guard
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(Greeter.Hello("Ada"));
    try
    {
      Console.WriteLine(Greeter.Hello(null)); // will throw (by design)
    }
    catch (Exception ex)
    {
      Console.WriteLine("Caught: " + ex.GetType().Name);
    }
  }
}

Pembantu Require.NotNull

Buat pembantu kecil Require.NotNull untuk mengurangi kode berulang dan memperjelas maksudnya.

using System;

public static class Require
{
  // Works for reference types; returns the validated value
  public static T NotNull<T>(T value, string name) where T : class
  {
    if (value == null) throw new ArgumentNullException(name);
    return value;
  }
}

public sealed class Email
{
  public string Address { get; private set; }

  public Email(string address)
  {
    Address = Require.NotNull(address, "address").Trim();
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Email e = new Email("user@mail.com");
    Console.WriteLine(e.Address);
  }
}

Nullable&lt;T&gt; vs referensi

Nullable<T> (misalnya, int?) digunakan untuk jenis nilai. Jenis referensi sudah dapat bernilai null; gunakan pemeriksaan dalam C# 6.

using System;

public class Program
{
  public static void Main(string[] args)
  {
    int x = 5;              // value type (non-nullable)
    int? maybe = null;      // Nullable<T> works for value types
    Console.WriteLine("x=" + x);
    Console.WriteLine("maybe has value? " + maybe.HasValue);
    Console.WriteLine("maybe or default: " + (maybe ?? -1));
  }
}

Dokumentasikan kontrak null

Nyatakan kemungkinan null dalam dokumentasi XML dan tetap konsisten: selalu kembalikan nilai yang tidak null, atau dokumentasikan dengan jelas jika null mungkin dikembalikan.

using System;

/// <summary>
/// Parses "key=value" and returns the value part.
/// Returns null if the format is invalid.
/// </summary>
public static class Parser
{
  // Explicitly document when null can be returned.
  public static string TryGetValue(string line)
  {
    if (line == null) throw new ArgumentNullException("line");
    int idx = line.IndexOf("=");
    if (idx < 0 || idx == line.Length - 1) return null; // documented nullable return
    return line.Substring(idx + 1);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(Parser.TryGetValue("a=1"));
    Console.WriteLine(Parser.TryGetValue("oops")); // prints nothing (null)
  }
}

Daftar periksa keamanan null (C# 6)

Daftar periksa:

  • Lindungi masukan dengan ArgumentNullException.
  • Kembalikan nilai yang tidak null secara bawaan; dokumentasikan setiap hasil yang dapat bernilai null.
  • Gunakan pembantu kecil (Require.NotNull) agar kode tetap rapi.
  • Jika masuk akal, pilih varian metode yang menghindari null (misalnya, string kosong daripada null).

Keamanan null dalam C# 6

Pemeriksaan singkat: Dalam C# 6 (tanpa jenis referensi nullable), praktik apa yang baik untuk mengurangi kesalahan terkait null dalam API publik?

Ringkasan

Ringkasan: NRT adalah fitur yang lebih baru. Dalam C# 6, tetap aman dengan pemeriksaan, dokumentasi yang jelas, metode pembantu, dan kontrak hasil yang konsisten serta tidak null.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Tipe referensi nullable (pemahaman) & anotasi (pola C# 6)” gratis?

Ya — teks lengkap “Tipe referensi nullable (pemahaman) & anotasi (pola C# 6)” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “Tipe referensi nullable (pemahaman) & anotasi (pola C# 6)”?

C# 6 tidak memiliki tipe referensi nullable (string?). Pelajari penanganan null yang aman: pemeriksaan masukan, dokumentasi yang jelas, helper Require.NotNull, serta perbedaannya dengan Nullable untu… Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 3.

Berapa lama pelajaran “Tipe referensi nullable (pemahaman) & anotasi (pola C# 6)” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Metode/tipe generik; batasan
  2. Variansi (in/out) dengan antarmuka dan delegasi
  3. Tipe referensi nullable (pemahaman) & anotasi (pola C# 6)
← Kembali ke C# Academy