Kaedah Sambungan dan dynamic
Kata Kunci dalam C#
Menggunakan kaedah sambungan dengan dynamic
objek dalam C# boleh membawa kepada ralat masa jalan. Mari kita ilustrasikan ini dengan contoh:
<code class="language-csharp">List<int> list = new List<int>() { 5, 56, 2, 4, 63, 2 }; Console.WriteLine(list.First());</code>
Kod ini berfungsi dengan sempurna. Walau bagaimanapun, jika kita mencuba ini:
<code class="language-csharp">dynamic dList = list; Console.WriteLine(dList.First());</code>
A RuntimeBinderException
dilemparkan. Ini berlaku kerana cara pengkompil dan masa jalan mengendalikan kaedah sambungan dan objek dinamik.
Biasanya, pengkompil mencari kaedah sambungan dengan memeriksa semua kelas statik yang tersedia dalam skop kod, mempertimbangkan ruang nama dan arahan using
. Ini membolehkan ia mencari kaedah sambungan First()
yang betul daripada System.Linq
.
Dengan objek dynamic
, masa jalan tidak mempunyai maklumat masa kompilasi tentang ruang nama dan arahan using
ini. Memasukkan maklumat ini pada masa jalan akan menjadi sangat kompleks dan tidak cekap. Oleh itu, pereka C# memilih untuk tidak melaksanakan fungsi ini untuk mengelakkan overhed prestasi dan potensi ketidakstabilan.
Atas ialah kandungan terperinci Mengapa kaedah lanjutan gagal dengan objek dinamik dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!