Akademi C# · Pelajaran

Konsep & kes penggunaan; penjana bertambah (gambaran keseluruhan)

Fahami perkara yang dilakukan penjana, kes penggunaan lazim, idea penjana bertambah, dan peniruan yang mesra C# 6 menggunakan atribut + kelas separa.

Pelajaran 1 daripada 28 langkah

Konsep & kes penggunaan; penjana bertambah (gambaran keseluruhan) ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 1 daripada 2. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi C#, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi C# merangkumi sejumlah 2 pelajaran.

Apakah penjana?

Matlamat: Pelajari maksud penjana kod sumber dan sebab penjana ini berguna.

  • Penjana menganalisis kod anda dan menjana fail C# baharu
  • Sesuai untuk kod kerangka berulang (pemeta, pemberitahuan, DTO)
  • Idea inkremental: hanya bertindak balas terhadap masukan yang berubah
  • Di sini kita menirunya dengan atribut + kelas partial (C# 6)

Idea kelas partial

Kelas partial membolehkan satu jenis dipecahkan merentasi beberapa fail; penjana biasanya menjana bahagian partial tambahan.

using System;

// Partial lets code live in multiple files; generators often emit a second part.
public partial class Person
{
  // "User" code (hand-written)
  public string FirstName;
  public string LastName;
}

// Imagine another file is generated with helpers.
public partial class Person
{
  // This region simulates "generated" members.
  public string FullName()
  {
    // simple boilerplate a generator could write
    return (FirstName ?? """") + " " + (LastName ?? """");
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Person p = new Person();
    p.FirstName = "Ada";
    p.LastName = "Lovelace";
    Console.WriteLine(p.FullName());
  }
}

Penanda atribut

Penjana mengimbas atribut untuk menentukan perkara yang perlu dijana. Kita meniru penemuan melalui refleksi (dalam penggunaan sebenar, pada masa binaan).

using System;
using System.Reflection;

// Marker attribute a generator would search for
[AttributeUsage(AttributeTargets.Class)]
public sealed class AutoNotifyAttribute : Attribute { }

// A class we want to augment (emulating generator input)
[AutoNotify]
public class Settings
{
  public string Theme; // we wish to auto-generate a property wrapper
}

// In real generators, Roslyn would find [AutoNotify] and emit code.
// Here we only "discover" the attribute at runtime (emulation).

public class Program
{
  public static void Main(string[] args)
  {
    Type t = typeof(Settings);
    object[] at = t.GetCustomAttributes(typeof(AutoNotifyAttribute), false);
    Console.WriteLine(at.Length > 0 ? "Marker found" : "No marker");
  }
}

Demonstrasi templat kod

Penjana akan menjana kod ke dalam fail baharu. Kita hanya mencetak templat ringkas untuk menggambarkan idea ini.

using System;
using System.Text;

// Tiny template that prints C# code a generator could add.
public static class Template
{
  public static string EmitAutoProperty(string className, string fieldName)
  {
    // Very small example; real generators would use syntax trees.
    StringBuilder sb = new StringBuilder();
    sb.AppendLine("public partial class " + className);
    sb.AppendLine("{");
    sb.AppendLine("  public string " + Upper(fieldName) + "");
    sb.AppendLine("  {");
    sb.AppendLine("    get { return this." + fieldName + "; }");
    sb.AppendLine("    set { this." + fieldName + " = value; /* notify here */ }");
    sb.AppendLine("  }");
    sb.AppendLine("}");
    return sb.ToString();
  }

  private static string Upper(string name)
  {
    if (string.IsNullOrEmpty(name)) return name;
    if (name.Length == 1) return name.ToUpperInvariant();
    return char.ToUpperInvariant(name[0]) + name.Substring(1);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    // Show what the "generated" code could look like
    string code = Template.EmitAutoProperty("Settings", "theme");
    Console.WriteLine(code);
  }
}

Gambaran keseluruhan inkremental

Penjana inkremental membahagikan kerja kepada langkah-langkah kecil.

  • Jejaki masukan (sintaks, fail tambahan)
  • Hanya kira semula apabila sesuatu berubah
  • Binaan lebih pantas, peruntukan memori lebih sedikit
  • Petua reka bentuk: pastikan langkah-langkah tulen dan deterministik

Kegunaan utama

Kes penggunaan:

  • Kod kerangka berulang: INotifyPropertyChanged, pemeta DTO
  • Semakan masa kompilasi: peta laluan, pengikatan tetapan
  • Prestasi: elakkan refleksi pada laluan yang kerap digunakan
  • Penyegerakan dokumentasi/kod: ID, pemalar

Elakkan penjana untuk logik masa jalan yang kompleks; pastikan keluaran kecil dan boleh dijangka.

Peranan penjana

Semakan pantas: Apakah yang dilakukan penjana kod sumber C# pada masa binaan?

Ringkasan

Ringkasan: Penjana memeriksa kod anda dan menjana sumber. Fikirkan dalam bentuk atribut + bahagian partial, pastikan keluaran kecil dan hanya kira semula perkara yang berubah secara inkremental.

Percuma untuk bermula

Pelajari C# dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
93
Pelajaran
346

Soalan Lazim

Adakah pelajaran “Konsep & kes penggunaan; penjana bertambah (gambaran keseluruhan)” percuma?

Ya — teks penuh “Konsep & kes penggunaan; penjana bertambah (gambaran keseluruhan)” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Akademi C#, tingkat taraf kepada CoddyKit PRO. Kursus Akademi C# merangkumi sejumlah 2 pelajaran.

Apakah yang akan saya pelajari dalam “Konsep & kes penggunaan; penjana bertambah (gambaran keseluruhan)”?

Fahami perkara yang dilakukan penjana, kes penggunaan lazim, idea penjana bertambah, dan peniruan yang mesra C# 6 menggunakan atribut + kelas separa. Anda berlatih Akademi C# menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Akademi C#?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi C# di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 2.

Berapa lamakah pelajaran “Konsep & kes penggunaan; penjana bertambah (gambaran keseluruhan)” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi C# ini?

Ya. Setiap pelajaran Akademi C# menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Konsep & kes penggunaan; penjana bertambah (gambaran keseluruhan)
  2. Pengalaman pembangun & batasan
← Kembali ke Akademi C#