0Pricing
C# Academy · Pelajaran

unmanaged, notnull, new() (emulasi C# 6)

C# 6 mendukung batasan class/struct/new(); emulasikan notnull/unmanaged yang lebih baru melalui pemeriksaan penjaga, bentuk API, dan konvensi.

unmanaged, notnull, new() (emulasi C# 6) adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.

Lanskap batasan

Tujuan: Gunakan batasan generik C# 6 secara efektif.

  • kelas vs struktur
  • new() untuk pembuatan tanpa aktivator
  • Meniru tipe tidak-null/tak-terkelola dengan penjaga dan desain API

kelas vs struktur

kelas membatasi T pada tipe referensi; struktur membatasi T pada tipe nilai. Penggunaan yang keliru gagal saat kompilasi.

using System;

// Works only for reference types
public static class RefBox
{
  public static string Show<T>(T value) where T : class
  {
    return value == null ? "null ref" : "ref: " + value.ToString();
  }
}

// Works only for value types
public static class ValBox
{
  public static string Show<T>(T value) where T : struct
  {
    return "value: " + value.ToString();
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    string s = "hello";
    int n = 42;

    Console.WriteLine(RefBox.Show<string>(s)); // OK
    Console.WriteLine(ValBox.Show<int>(n));    // OK

    // Console.WriteLine(RefBox.Show<int>(n)); // compile-time error (int is struct)
    // Console.WriteLine(ValBox.Show<string>(s)); // compile-time error (string is class)
  }
}

new() dalam praktik

new() menjamin adanya konstruktor publik tanpa parameter sehingga kode generik dapat langsung memanggil new T().

using System;

// Requires public parameterless ctor on T
public static class Factory
{
  public static T Create<T>() where T : new()
  {
    return new T(); // safe in C# 6 with new()
  }
}

public sealed class Sample
{
  public string Name { get; set; }
  public Sample() { Name = "default"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Sample x = Factory.Create<Sample>();
    Console.WriteLine("Created: " + x.Name);
  }
}

Meniru tipe tidak-null

C# 6 tidak memiliki batasan tidak-null. Dekati perilaku tersebut dengan where T : class dan tambahkan pemeriksaan null secara eksplisit di dalam API.

using System;

// C# 6 has no notnull constraint. Use where T : class and guard at runtime.
public static class NotNullApi
{
  public static int LengthOf<T>(T x) where T : class
  {
    if (x == null) throw new ArgumentNullException("x");
    return x.ToString().Length; // placeholder usage
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(NotNullApi.LengthOf<string>("hi")); // 2
    try
    {
      Console.WriteLine(NotNullApi.LengthOf<string>(null)); // throws
    }
    catch (Exception ex)
    {
      Console.WriteLine("Guard fired: " + ex.GetType().Name);
    }
  }
}

Meniru maksud tipe tak-terkelola

C# 6 tidak memiliki batasan tak-terkelola. Anda dapat menggunakan struktur dan antarmuka (misalnya antarmuka pembanding) untuk menargetkan tipe nilai yang menyerupai angka.

using System;

// No unmanaged constraint in C# 6.
// Use struct for value types and restrict API usage (document numeric-only intent).
public static class NumericOps
{
  public static T Max<T>(T a, T b) where T : struct, IComparable
  {
    // Works for numeric primitives because they implement IComparable
    return (a.CompareTo(b) >= 0) ? a : b;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(NumericOps.Max<int>(3, 9));     // 9
    Console.WriteLine(NumericOps.Max<double>(2.5, 2)); // 2.5
  }
}

Kiat praktis

Kiat:

  • Pilih kelas/struktur untuk mempersempit T sejak awal.
  • Gunakan new() jika Anda perlu membuat T.
  • Tiru tipe tidak-null dengan pemeriksaan saat runtime.
  • Tiru tipe tak-terkelola melalui struktur + penggunaan yang didokumentasikan (sering kali tipe primitif numerik).

Batasan konstruktor

Pemeriksaan cepat: Batasan mana dalam C# 6 yang mengharuskan argumen tipe memiliki konstruktor publik tanpa parameter?

Ringkasan

Ringkasan: Gunakan kelas/struktur/new() dalam C# 6. Tiru tipe tidak-null dengan pemeriksaan null dan maksud tipe tak-terkelola dengan batasan struktur + antarmuka.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “unmanaged, notnull, new() (emulasi C# 6)” gratis?

Ya — teks lengkap “unmanaged, notnull, new() (emulasi 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 “unmanaged, notnull, new() (emulasi C# 6)”?

C# 6 mendukung batasan class/struct/new(); emulasikan notnull/unmanaged yang lebih baru melalui pemeriksaan penjaga, bentuk API, dan konvensi. 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 1 dari 3.

Berapa lama pelajaran “unmanaged, notnull, new() (emulasi 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. unmanaged, notnull, new() (emulasi C# 6)
  2. Matematika generik (ikhtisar), atribut generik (bila relevan)
  3. Utilitas generik yang dapat digunakan ulang
← Kembali ke C# Academy