مشاركة عبر


الوصول إلى السمات مخصصة

بعد السمات have been associated مع برنامج عناصر, انعكاس can be used إلى استعلام their existence و قيم. في the .NET الإصدار إطار العمل 1.0 و 1.1, مخصص السمات are examined في the execution سياق. The .NET الإصدار إطار العمل 2.0 provides a جديد تم تحميله سياق, the انعكاس-فقط سياق, which can be used إلى examine تعليمات برمجية that cannot be تم تحميله for execution.

The انعكاس-فقط سياق

تعليمات برمجية تم تحميله في the انعكاس-فقط سياق cannot be executed. This means that instances of مخصص السمات cannot be تاريخ الإنشاء, because that would require executing their constructors. إلى تحميل و examine مخصص السمات في the انعكاس-فقط سياق, استخدم the CustomAttributeData فئة. You can obtain instances of this فئة بواسطة using the appropriate التحميل الزائد of the ثابت CustomAttributeData.GetCustomAttributes أسلوب. انظر كيفية القيام بما يلي: تحميل تجميعات في سياق انعكاس فقط

The Execution سياق

The main انعكاس وظائف إلى استعلام السمات في the execution سياق are MemberInfo.GetCustomAttributes و Attribute.GetCustomAttributes.

الوصول السمة المخصصة هو محددة بالنسبة للتجميع في عليها هو مرفقة. هذا المكافئ للتحقق ما إذا كان أسلوب على نوع في تجميع الذي سمة مخصصة مرفق يمكن استدعاء المنشئ من سمة مخصصة.

وظائف such كـ Assembly.GetCustomAttributes(Boolean) فحص the رؤية و إمكانية وصول ذوي الاحتياجات الخاصة of the نوع وسيطة. فقط تعليمات برمجية في the تجميع that يحتوي على the معرّفة بواسطة مستخدم نوع can retrieve a مخصص سمة of that نوع using GetCustomAttributes.

المثال C# التالية هو نمط تصميم نموذجية لسمة مخصصة. يوضح وقت التشغيل سمة مخصصة طراز الانعكاس.

System.DLL
public class DescriptionAttribute : Attribute
{
}

System.Web.DLL
internal class MyDescriptionAttribute : DescriptionAttribute
{
}

public class LocalizationExtenderProvider
{
    [MyDescriptionAttribute(...)]
    public CultureInfo GetLanguage(...)
    {
    }
}

إذا وقت التشغيل هو يحاول استرداد السمات المخصصة للسمة المخصصة عام اكتب DescriptionAttributeالمرفقة GetLanguage الطريقة، فإنه يقوم بتنفيذ الإجراءات التالية:

  1. يتحقق وقت التشغيل التي نوع وسيطة DescriptionAttribute إلى Type.GetCustomAttributes (Typetype) هو العامة، ولذلك هو vهوible ويمكن الوصول إليه.

  2. يتحقق وقت التشغيل الذي النوع المعرف من قبل مستخدم من MyDescriptionAttributeالتي هو مشتقة من من DescriptionAttribute هو vهوible ويمكن الوصول إليه من خلال النظام.ويب.DLL تجميع، حيث أنه هو مرفقة ب أسلوب () GetLanguage.

  3. يتحقق وقت التشغيل التي الدالة الإنشائية MyDescriptionAttribute مرئي ويمكن الوصول إليه من خلال النظام.ويب.DLL تجميع.

  4. وقت التشغيل باستدعاء المنشئ MyDescriptionAttribute مع المعلمات السمة المخصصة و بإرجاع كائن جديد إلى المستدعي.

قد حدوث تسرب للطراز انعكاس سمة مخصصة مثيلات المعرفة من قبل المستخدم أنواع خارج تجميع الذي تم تعريف النوع. Th هو هو لا يختلف من الأعضاء التي تقوم بإرجاع مثيلات الأنواع المعرفة من قبل مستخدم، مثل نوع.GetMethods() بإرجاع صفيفة من RuntimeMethodInfo الكائنات في مكتبة وقت تشغيل النظام. إلى منع عميل من اكتشاف معلومات حول نوع سمة cusإلىm المعرفة من قبل مستخدم، قم بتعريف الأعضاء للنوع إلى أن nonpublic.

يلي مثال يوضح طريقة أساسية من استخدام الانعكاس للحصول على حق الوصول إلى السمات المخصصة.

Class Class1
    Public Shared Sub Main()
        Dim info As System.Reflection.MemberInfo = GetType(Class1)
        Dim attributes() As Object = info.GetCustomAttributes(True)
        For i As Integer = 0 To attributes.Length - 1
            System.Console.WriteLine(attributes(i))
        Next i
    End Sub
End Class
class MyClass 
{ 
    public static void Main() 
    {
        System.Reflection.MemberInfo info = typeof(MyClass);
        object[] attributes = info.GetCustomAttributes(true);
        for (int i = 0; i < attributes.Length; i++)
        {
            System.Console.WriteLine(attributes[i]);
        }
    }
}

راجع أيضًا:

المرجع

MemberInfo.GetCustomAttributes

Attribute.GetCustomAttributes

المبادئ

عرض معلومات نوع

اعتبارات الأمان انعكاس