Rumah > pembangunan bahagian belakang > C++ > Mengapa kaedah lanjutan gagal dengan objek dinamik dalam C#?

Mengapa kaedah lanjutan gagal dengan objek dinamik dalam C#?

Patricia Arquette
Lepaskan: 2025-01-27 23:46:11
asal
594 orang telah melayarinya

Why Do Extension Methods Fail with Dynamic Objects in C#?

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>
Salin selepas log masuk

Kod ini berfungsi dengan sempurna. Walau bagaimanapun, jika kita mencuba ini:

<code class="language-csharp">dynamic dList = list;
Console.WriteLine(dList.First());</code>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan