Dalam konteks tindakan pengawal ASP.NET MVC, satu sekatan ialah "jenis generik terbuka" tidak boleh digunakan. Artikel ini menyelidiki konsep jenis generik terbuka dan tertutup dalam .NET.
Jenis generik terbuka dalam .NET ialah jenis yang mengandungi parameter jenis, yang pada asasnya merupakan pemegang tempat untuk jenis yang tidak ditentukan. Jenis ini boleh menjadi parameter jenis atau jenis generik yang ditakrifkan tanpa menyatakan parameter jenis. Sebagai contoh,
Bertentangan dengan jenis generik terbuka, jenis generik tertutup ialah jenis yang tidak mengandungi parameter jenis. Mereka ditentukan sepenuhnya menggunakan jenis konkrit sebagai parameter. Contohnya, List
Walaupun jenis generik terbuka mengandungi parameter jenis, jenis generik tidak terikat ialah jenis generik dengan parameter jenis tidak ditentukan. Jenis tidak terikat tidak boleh digunakan secara langsung dalam ungkapan, dan juga tidak boleh digunakan atau dipanggil. Mereka mewakili definisi generik sebelum mengikat kepada jenis tertentu.
Pertimbangkan coretan kod berikut:
<code class="language-c#">class Program { static void Main() { Test<int>(); } static void Test<T>() { Console.WriteLine(typeof(List<T>)); // 打印类型名称 } }</code>
Apabila kod ini dilaksanakan, "System.Collections.Generic.List`1[System.Int32]" akan dicetak, yang mewakili jenis terbuka terikat kerana parameter jenis diketahui pada masa jalan: System.Int32.
Jenis generik tidak terikat boleh diikat pada masa jalan menggunakan kaedah Type.MakeGenericType. Contohnya:
<code class="language-c#">Type unboundGenericList = typeof(List<>); Type listOfInt = unboundGenericList.MakeGenericType(typeof(int)); if (listOfInt == typeof(List<int>)) Console.WriteLine("构造了一个 List<int> 类型。");</code>
Memahami perbezaan antara jenis generik terbuka, tertutup dan tidak terikat adalah penting untuk menggunakan generik secara berkesan dalam .NET. Dengan memanfaatkan konsep ini, anda boleh mencipta kod yang fleksibel dan boleh diguna semula yang mengendalikan jenis data yang berbeza dengan cekap.
Atas ialah kandungan terperinci Apakah Perbezaan Antara Jenis Generik Terbuka, Tertutup dan Tidak Terikat dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!