0Pricing
C# Academy · Pelajaran

Tipe dynamic

Tunda penentuan tipe hingga saat runtime dengan dynamic.

Tipe dynamic adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. 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 4 pelajaran total.

Apa itu dynamic?

Tipe dynamic melewati pemeriksaan tipe pada waktu kompilasi. Akses anggota dan operasi ditentukan pada waktu berjalan.

using System;

class Program {
    static void Main() {
        dynamic value = 10;
        Console.WriteLine(value + 5);
    }
}

Menetapkan Ulang Tipe yang Berbeda

Variabel dynamic dapat menyimpan tipe apa pun dan bahkan berganti tipe pada penetapan yang berbeda.

using System;

class Program {
    static void Main() {
        dynamic x = 1;
        Console.WriteLine(x);
        x = "now a string";
        Console.WriteLine(x);
    }
}

Pengikatan pada Waktu Berjalan

Dengan dynamic, kompilator mempercayai Anda. Pencarian metode dan properti terjadi saat baris dijalankan, bukan saat dikompilasi.

using System;

class Program {
    static void Main() {
        dynamic text = "hello";
        Console.WriteLine(text.ToUpper());
    }
}

Kesalahan Muncul pada Waktu Berjalan

Karena pemeriksaan ditunda, anggota yang salah akan melempar RuntimeBinderException pada waktu berjalan, bukan gagal dikompilasi.

using System;
using Microsoft.CSharp.RuntimeBinder;

class Program {
    static void Main() {
        dynamic n = 5;
        try {
            n.NoSuchMethod();
        } catch (RuntimeBinderException) {
            Console.WriteLine("No such member");
        }
    }
}

dynamic vs var

var tetap pada waktu kompilasi; dynamic tetap fleksibel pada waktu berjalan. Keduanya tampak serupa, tetapi perilakunya sangat berbeda.

using System;

class Program {
    static void Main() {
        var fixedType = 10;
        dynamic flexible = 10;
        flexible = "changed";
        Console.WriteLine(fixedType + " " + flexible);
    }
}

Aritmetika pada dynamic

Operator pada dynamic ditentukan pada waktu berjalan berdasarkan nilai sebenarnya yang terlibat.

using System;

class Program {
    static void Main() {
        dynamic a = 3;
        dynamic b = 4;
        Console.WriteLine(a * b);
    }
}

Nilai Kembalian dynamic

Sebuah metode dapat mengembalikan dynamic ketika tipenya benar-benar bervariasi, tetapi pemanggil kehilangan bantuan kompilator pada waktu kompilasi.

using System;

class Program {
    static dynamic GetValue(bool flag) {
        return flag ? (dynamic)42 : "text";
    }
    static void Main() {
        Console.WriteLine(GetValue(true));
        Console.WriteLine(GetValue(false));
    }
}

Kasus Penggunaan dynamic

dynamic membantu dalam interoperabilitas COM, data mirip JSON, dan pemanggilan kode yang bentuknya baru diketahui saat waktu berjalan.

using System;

class Program {
    static void Main() {
        dynamic data = 100;
        data += 1;
        Console.WriteLine(data);
    }
}

Biaya Kinerja

Pengikatan pada waktu berjalan memiliki biaya tambahan. Untuk perulangan ketat atau kode sederhana, pilih tipe statis demi kecepatan dan keamanan.

using System;

class Program {
    static void Main() {
        int fast = 0;
        for (int i = 0; i < 5; i++) fast += i;
        Console.WriteLine(fast);
    }
}

Tanpa IntelliSense

Penyunting tidak dapat menyarankan anggota pada dynamic karena tipenya baru diketahui saat waktu berjalan. Hal ini memperlambat pengembangan.

using System;

class Program {
    static void Main() {
        dynamic s = "Code";
        Console.WriteLine(s.Length);
    }
}

Gunakan Secukupnya

Gunakan dynamic hanya ketika pengetikan statis benar-benar tidak dapat menyatakan skenario tersebut; jika tidak, pilih tipe konkret.

using System;

class Program {
    static void Main() {
        dynamic flexible = 7;
        Console.WriteLine(flexible.GetType().Name);
    }
}

Pemeriksaan Singkat

Uji pemahaman Anda tentang dynamic.

Ringkasan

dynamic menonaktifkan pemeriksaan tipe pada waktu kompilasi dan menentukan anggota pada waktu berjalan, sehingga variabel dynamic dapat berganti tipe dan pemanggilan yang tidak valid melempar RuntimeBinderException.

Berbeda dari var (tetap pada waktu kompilasi), dynamic bersifat fleksibel, tetapi mengurangi kinerja, tidak menyediakan IntelliSense, dan sebaiknya digunakan secukupnya.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Tipe dynamic” gratis?

Ya — teks lengkap “Tipe dynamic” 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 4 pelajaran total.

Apa yang akan aku pelajari di “Tipe dynamic”?

Tunda penentuan tipe hingga saat runtime dengan dynamic. 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 4.

Berapa lama pelajaran “Tipe dynamic” 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. Inferensi Tipe Variabel Lokal dengan var
  2. Kapan Sebaiknya Menghindari var
  3. Tipe dynamic
  4. Ekspresi new dengan Tipe Target
← Kembali ke C# Academy