Generik telah ditambah dalam C# versi 2.0 dan merupakan salah satu konsep yang paling penting dalam bahasa. Ia membolehkan anda menulis kod boleh guna semula, berprestasi tinggi yang selamat jenis pada masa penyusunan. Generik membolehkan anda menggunakan jenis dalam kod anda tanpa mengetahui jenisnya terlebih dahulu.
Generik digunakan di banyak tempat dalam .NET, termasuk koleksi, perwakilan dan kod tak segerak. Dengan generik, anda tidak perlu mengetahui saiz koleksi terlebih dahulu dan anda boleh menggunakan generik dengan sebarang jenis elemen, malah jenis data tersuai khusus untuk kod anda. C# menyediakan sokongan untuk jenis generik (kelas, antara muka, dll.) dan kaedah generik.
Dalam generik anda mempunyai parameter jenis dan parameter jenis. Ini serupa dengan kaedah yang mempunyai parameter yang boleh anda hantar ke kaedah tersebut.
Sintaks untuk mengisytiharkan jenis generik terdiri daripada parameter jenis yang disertakan dalam kurungan sudut. Nama jenis. Contohnya, Locator
public class Locator<T> { }
Untuk membuat instance Locator
var stringLocator = new Locator<string>();
Anda boleh menggunakan parameter jenis (T) pada kaedah kelas seperti yang ditunjukkan dalam contoh di bawah.
public class Locator{ public IList Items { get; set; } public T Locate(int index){ return Items[index]; } } var stringLocator = new Locator<string>(); string item = stringLocator.Locate(2);
Satu lagi faedah generik ialah IntelliSense yang disediakan oleh editor. Apabila anda menaip stringLocator.Locate(4) dalam Visual Studio atau VS Code dan tuding pada nama kaedah ia menunjukkan bahawa ia mengembalikan rentetan dan bukannya T. Pengkompil akan membuang ralat jika anda cuba memberikan hasil kepada sebarang jenis selain daripada rentetan. Contohnya, apabila
// Error: Cannot implicitly convert type 'string' to 'int' [c-sharp]csharp(CS0029) int item = stringLocator.Locate(2);
mewarisi daripada jenis asas generik atau antara muka generik, jenis generik boleh menggunakan parameter jenis sebagai argumen jenis. Jenis LinkedList
public class LinkedList<T> : IEnumerable<T>
Kaedah generik hanyalah kaedah yang mengisytiharkan parameter jenis yang boleh anda gunakan di dalam kaedah dan menggunakannya sebagai parameter dan jenis pulangan. Dalam contoh berikut, Swap
public class Swapper{ public T Swap<T>(T first, T second){ T temp = first; first = second; second = temp; return temp; } }
Seperti jenis generik, apabila anda memanggil kaedah generik ia akan mengembalikan pembolehubah yang ditaip kuat.
var swapper = new Swapper(); int result = swapper.Swap<int>(5, 3);
boleh mempunyai berbilang parameter umum. Kelas Kamus dalam ruang nama System.Collections.Generic mempunyai dua jenis parameter, kunci dan nilai.
public class Dictionary<TKey, TValue>
Akhir sekali, adalah penting untuk memahami perkara yang universal. Untuk jenis, semuanya boleh menjadi generik kecuali penghitungan. Ini termasuk -
Untuk ahli jenis, hanya kaedah dan jenis bersarang boleh menjadi generik. Ahli berikut tidak boleh bersifat generik -
Atas ialah kandungan terperinci Terangkan cara generik berfungsi dalam C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!