Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan sama ada Jenis Melaksanakan Antara Muka Generik Menggunakan Jenis Kusutnya?
Menentukan sama ada Jenis Melaksanakan Jenis Antara Muka Generik daripada Jenis Mangled
Antara muka dan kelas generik membenarkan banyak fleksibiliti dan keselamatan jenis dalam kod, tetapi bekerja dengan dan memeriksanya boleh menjadi agak menyusahkan. Dalam artikel ini, kami akan menangani masalah khusus: menentukan sama ada jenis melaksanakan antara muka generik apabila hanya jenis hancur tersedia.
Untuk memberikan contoh, mari kita pertimbangkan takrif jenis berikut:
public interface IFoo<T> : IBar<T> {} public class Foo<T> : IFoo<T> {}
Persoalannya, bagaimana kita boleh memastikan sama ada jenis Foo
Cara yang biasa dicadangkan untuk mengendalikan situasi ini ialah dengan menggunakan refleksi. Begini cara anda boleh mendekatinya:
// Assume a mangled type 'typeof(Foo)' is provided. Type fooType = typeof(Foo); // Check if 'Foo' implements the generic interface 'IBar<T>'. bool isBar = fooType.GetInterfaces().Any(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IBar<>)); Console.WriteLine(isBar);
Pertanyaan LINQ ini memeriksa antara muka yang dilaksanakan oleh Foo, memfokuskan semata-mata pada antara muka generik. Jika mana-mana antara muka generik tersebut sepadan dengan takrifan IBar<>, ia akan kembali benar.
Dengan memanfaatkan pendekatan ini, anda boleh menentukan dengan berkesan sama ada sesuatu jenis melaksanakan antara muka generik tertentu, walaupun semasa berurusan dengan jenis yang rosak, memberikan cerapan berharga untuk keperluan introspeksi dan analisis jenis anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan sama ada Jenis Melaksanakan Antara Muka Generik Menggunakan Jenis Kusutnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!