Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menentukan sama ada Jenis Melaksanakan Antara Muka Generik Menggunakan Jenis Kusutnya?

Bagaimanakah Saya Boleh Menentukan sama ada Jenis Melaksanakan Antara Muka Generik Menggunakan Jenis Kusutnya?

Patricia Arquette
Lepaskan: 2025-01-07 07:01:40
asal
710 orang telah melayarinya

How Can I Determine if a Type Implements a Generic Interface Using its Mangled Type?

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

Persoalannya, bagaimana kita boleh memastikan sama ada jenis Foo melaksanakan antara muka generik IBar apabila hanya jenis hancur (cth., Foo tanpa parameter jenis generik) diketahui?

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

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!

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