Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengenalpasti Kaedah Sambungan Menggunakan Refleksi dalam C#?

Bagaimanakah Saya Boleh Mengenalpasti Kaedah Sambungan Menggunakan Refleksi dalam C#?

Linda Hamilton
Linda Hamiltonasal
2025-01-06 08:52:39696semak imbas

How Can I Identify Extension Methods Using Reflection in C#?

Cara Mengenalpasti Kaedah Sambungan Menggunakan Refleksi

Dalam C#, pantulan menyediakan mekanisme yang berkuasa untuk mengintrospeksi elemen kod. Ini termasuk keupayaan untuk mengenal pasti sama ada kaedah telah diperluaskan kepada kelas menggunakan kaedah sambungan.

Menentukan sama ada Kaedah Wujud sebagai Kaedah Sambungan

Untuk menentukan sama ada kaedah adalah kaedah lanjutan, kita boleh menggunakan refleksi untuk memeriksa metadata pemasangan. Khususnya, kita boleh mencari:

  1. Kelas yang dihiasi dengan atribut ExtensionAttribute. Atribut ini menunjukkan bahawa kelas mengandungi kaedah sambungan.
  2. Kaedah dalam kelas ini dihiasi dengan Atribut Extension.
  3. Parameter pertama kaedah sepadan dengan jenis yang kami minati.

Contoh Kod

Coretan kod berikut menunjukkan cara menyemak sambungan kaedah menggunakan refleksi:

using System;
using System.Runtime.CompilerServices;
using System.Reflection;
using System.Linq;
using System.Collections.Generic;

public static class Helper
{
    public static IEnumerable<MethodInfo> GetExtensionMethods(Assembly assembly, Type extendedType)
    {
        var isGenericTypeDefinition = extendedType.IsGenericType && extendedType.IsTypeDefinition;
        var query = from type in assembly.GetTypes()
                    where type.IsSealed &amp;&amp; !type.IsGenericType &amp;&amp; !type.IsNested
                    from method in type.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
                    where method.IsDefined(typeof(ExtensionAttribute), false)
                    where isGenericTypeDefinition
                        ? method.GetParameters()[0].ParameterType.IsGenericType &amp;&amp; method.GetParameters()[0].ParameterType.GetGenericTypeDefinition() == extendedType
                        : method.GetParameters()[0].ParameterType == extendedType
                    select method;
        return query;
    }
}

Kod ini boleh digunakan untuk menyemak sama ada kaedah ialah kaedah lanjutan untuk jenis tertentu dalam perhimpunan tertentu.

Kesimpulan

Dengan menggunakan refleksi, kita boleh menentukan sama ada kaedah telah diperluaskan kepada kelas sebagai kaedah lanjutan. Teknik ini berguna untuk pelbagai tujuan, seperti mengesahkan bahawa kaedah sambungan telah dilaksanakan dengan betul.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengenalpasti Kaedah Sambungan Menggunakan Refleksi dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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