Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 18548|Jawab: 0

[Sumber] Penggunaan dinamis di C# 4.0

[Salin tautan]
Diposting pada 07/07/2016 10.23.00 | | |
C# 4.0 memperkenalkan tipe baru: dinamis, yang merupakan tipe statis, tetapi instans objek jenis ini dapat melewati proses pemeriksaan tipe statis. Dalam kebanyakan kasus, jenis berfungsi seperti kelas objek. Pada waktu kompilasi, instans kelas dinamis mendukung operasi apa pun, jadi tidak perlu khawatir apakah objek diambil dari API COM, atau bahasa dinamis seperti IronPython, dari DOM HTML, atau dari refleksi, atau di tempat lain dalam program. Namun, jika kode melakukan sesuatu yang tidak valid, kesalahan akan ditangkap saat runtime.
Misalnya, contoh metode exampleMethod1 dalam cuplikan kode berikut hanya memiliki satu parameter, dan pengkompilasi dapat mengidentifikasi bahwa parameter tersebut tidak valid saat memanggil ec.exampleMethod1(10,4) pada waktu kompilasi; Ini adalah kesalahan kompilasi. Panggilan kedua dynamic_ec.exampleMethod1(10,4) tidak diperiksa untuk jenis statis. Oleh karena itu, compiler tidak melaporkan error kompilasi. Namun, bug itu tidak bersembunyi selamanya; Ini akan ditangkap saat runtime dan memicu pengecualian runtime.
static void Main(string[] args){
    ExampleClass ec = ExampleClass(); baru
    dynamic_ec dinamis = ExampleClass(); baru
    dynamic_ec.exampleMethod1(10, 4);
    dynamic_ec.someMethod("beberapa argumen", 7, null);
    dynamic_ec.nonexistentMethod();
}
class ExampleClass {
    publik ExampleClass() { }
    publik ExampleClass(int v) { }
    public void exampleMethod1(int i) { }
    public void exampleMethod2(string str) { }
}
Berikut adalah contoh penggunaan dinamis untuk memanggil IronPython:

menggunakan IronPython.Hosting;
menggunakan Microsoft.scrip{filtering}ting. Menerima tamu;

Console.WriteLine("Memuat random.py...");
scrip{filter}tRuntime py = Python.CreateRuntime();
acak dinamis = py. UseFile("random.py");
Console.WriteLine("random.py dimuat!");
var item = Enumerable.Rentang (1, 7). ToArray();

untuk (int s = 0; s < 10000; s++) {
    acak.acak(item);
    Console.Write("Urutan {0}: ", s);
    foreach (int i dalam item) {
        Console.Write("{0} ", i);
    }
    Console.WriteLine();
}

Untuk objek atau ekspresi jenis dinamis, peran pengkompilasi adalah untuk merangkum tindakan yang diharapkan untuk dilakukan setiap ekspresi, dan pada saat eksekusi, periksa informasi yang disimpan, dan pernyataan yang tidak valid akan memicu pengecualian runtime.
Jenis hasil dari sebagian besar operasi dinamis juga dinamis. Misalnya, jika Anda mengarahkan kursor mouse ke testSum dalam contoh berikut, perintah pintar akan menampilkan testSum dinamis (variabel lokal).
dinamis d = 1;
var testSum = d + 3;
Arahkan penunjuk mouse ke testSum di bawah ini.
System.Console.WriteLine(testSum);

Konversi jenis
Transisi antara instans tipe Dinamis dan jenis instans lainnya sederhana, dan pengembang dapat dengan mudah beralih antara perilaku dinamis dan non-dinamis. Instans apa pun dapat dikonversi secara implisit menjadi instans tipe dinamis, lihat contoh berikut:
dinamis d1 = 7;
dinamis d2 = "string";
dinamis d3 = System.DateTime.Today;
dinamis d4 = System.Diagnostics.Process.GetProcesses();

Sebaliknya, konversi implisit dapat diterapkan secara dinamis ke ekspresi jenis dinamis apa pun.
Dan sebaliknya, ekspresi dinamis tipe apa pun juga dapat dikonversi secara implisit ke jenis lain.
int i = d1;
string str = d2;
TanggalWaktu dt = d3;
System.Diagnostics.Process[] procs = d4;

Masalah kelebihan beban dengan parameter tipe dinamis dalam metode
Jika metode dipanggil melewati objek jenis dinamis, atau objek yang dipanggil adalah jenis dinamis, maka penilaian kelebihan beban terjadi pada runtime dan bukan pada waktu kompilasi.

DLR runtime bahasa dinamis
Runtime bahasa dinamis adalah . NET Framework 4 Beta 1 adalah serangkaian API baru yang memberikan dukungan untuk jenis dinamis di C# dan juga mengimplementasikan bahasa pemrograman dinamis seperti IronPython dan IronRuby.

Interoperabilitas COM
C# 4.0 mencakup beberapa fitur yang meningkatkan interoperabilitas dengan antarmuka COM API tradisional seperti otomatisasi Office. Jenis dinamis, parameter bernama, dan parameter opsional juga merupakan bagian dari peningkatan.
Banyak metode COM mengizinkan parameter dan nilai pengembalian mereka menjadi objek jenis, jadi untuk bahasa yang diketik dengan kuat seperti C#, diperlukan banyak konversi tipe paksa. Namun, di C# 4.0, jika Anda menambahkan opsi /link pada waktu kompilasi, tipe dinamis memiliki efek baru: itu membuat jenis objek (jenis parameter atau tipe pengembalian) dalam tanda tangan metode antarmuka COM dianggap dinamis, sehingga menghindari banyak konversi jenis. Misalnya, pernyataan berikut membandingkan ini.
Itu tidak digunakan dinamis.
((Excel.Range)excel. Sel[1, 1]). Value2 = "Nama";
Rentang Excel.Rentang = (Excel.Rentang)excel. Sel[1, 1];

Itu adalah yang dinamis.
unggul. Sel[1, 1]. Nilai = "Nama";
Excel.Rentang rentang = excel. Sel[1, 1];




Mantan:MVC AJAX. Halaman BeginForm() dikirimkan secara asinkron
Depan:objek yang berbeda dengan nilai pengidentifikasi yang sama sudah dikaitkan dengan...
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com