Rumah >pembangunan bahagian belakang >C++ >Mengapa Kaedah Sambungan Dinamik Membuang RuntimeBinderExceptions dalam C#?
RuntimeBinderException
Dalam C#, kita sering perlu menambah kaedah baru ke kategori yang sedia ada tanpa mengubah kod sumber asal. Kaedah pengembangan diperkenalkan untuk memenuhi keperluan ini.
Pertimbangkan senarai integer dan gunakan kaedah First()
untuk mengakses elemen pertama:
<code class="language-csharp">List<int> list = new List<int>() { 5, 56, 2, 4, 63, 2 }; Console.WriteLine(list.First());</code>
Kod ini berjalan dengan sempurna. Walau bagaimanapun, jika anda cuba menggunakan kata kunci untuk menukar senarai yang sama ke objek dinamik, ia akan menyebabkan keabnormalan: dynamic
<code class="language-csharp">dynamic dList = list; Console.WriteLine(dList.First()); // 抛出 RuntimeBinderException</code>Untuk memahami tingkah laku yang tidak normal ini, kita perlu memahami mekanisme asas kaedah pengembangan. Dalam kod bukan -dinamik, pengkompil mencari kelas statik yang sepadan dengan kaedah pengembangan dalam semua kelas yang diketahui. Carian ini mengikuti urutan bersarang dan tersedia
arahan. using
dalam kod sumber semasa runtime. Walau bagaimanapun, tidak ada mekanisme yang mudah untuk menyandarkan maklumat ini ke tapak panggilan. Walaupun ia telah menganggap kemungkinan merancang mekanisme ini, akhirnya dipercayai bahawa kosnya terlalu tinggi dan risiko terlalu tinggi. using
Atas ialah kandungan terperinci Mengapa Kaedah Sambungan Dinamik Membuang RuntimeBinderExceptions dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!