Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Öznitelikler program öğeleriyle ilişkilendirildikten sonra, bunların varlığını ve değerlerini sorgulamak için yansıma kullanılabilir. .NET, yürütme için yüklenemeyen kodu incelemek amacıyla kullanabileceğiniz MetadataLoadContext sağlar.
MetadataLoadContext
MetadataLoadContext çerçevesine yüklenen kod çalıştırılamaz. Bu, oluşturucularının yürütülmesini gerektireceğinden özel öznitelik örneklerinin oluşturulamayacağı anlamına gelir. Özel öznitelikleri MetadataLoadContext bağlamında yüklemek ve incelemek için CustomAttributeData sınıfını kullanın. Statik CustomAttributeData.GetCustomAttributes yöntemin uygun aşırı yüklemesini kullanarak bu sınıfın örneklerini alabilirsiniz. Daha fazla bilgi için bkz . Nasıl yapılır: MetadataLoadContext kullanarak derleme içeriğini inceleme.
Yürütme bağlamı
Yürütme bağlamında öznitelikleri sorgulamak için ana yansıma yöntemleri MemberInfo.GetCustomAttributes ve Attribute.GetCustomAttributes'tir.
Özel bir özniteliğin erişilebilirliği, eklendiği derleme bakımından kontrol edilir. Bu, özel özniteliğin eklendiği derlemedeki bir türdeki yöntemin özel özniteliğin oluşturucusunu çağırıp çağıramayacağını denetlemeye eşdeğerdir.
Bunun gibi Assembly.GetCustomAttributes(Boolean) yöntemler, tür bağımsız değişkeninin görünürlüğünü ve erişilebilirliğini denetler. Kullanıcı tanımlı türü içeren derlemedeki kod yalnızca GetCustomAttributes kullanarak bu türün özel özniteliğini alabilir.
Aşağıdaki C# örneği tipik bir özel öznitelik tasarım desenidir. Çalışma zamanı özel nitelik yansıma modelini tasvir eder.
System.DLL
public class DescriptionAttribute : Attribute
{
}
System.Web.DLL
internal class MyDescriptionAttribute : DescriptionAttribute
{
}
public class LocalizationExtenderProvider
{
[MyDescriptionAttribute(...)]
public CultureInfo GetLanguage(...)
{
}
}
Çalışma zamanı, DescriptionAttribute yöntemine bağlı genel özel öznitelik türü GetLanguage için özel öznitelikleri almaya çalıştığında, aşağıdaki eylemleri gerçekleştirir:
- Çalışma zamanı, tür bağımsız değişkeni
DescriptionAttributeType.GetCustomAttributes(Type type)'nin genel olduğunu, dolayısıyla görünür ve erişilebilir olduğunu denetler. - Çalışma zamanı,
MyDescriptionAttribute'den türetilmiş kullanıcı tanımlı türDescriptionAttribute'in,GetLanguage()yöntemine eklendiğinde System.Web.dll derlemesi içinde görünür ve erişilebilir olup olmadığını denetler. - Çalışma zamanı,
MyDescriptionAttributeoluşturucusunun System.Web.dll derlemesi içinde görünür ve erişilebilir olduğunu kontrol eder. - Çalışma zamanı,
MyDescriptionAttributeoluşturucusunu özel öznitelik parametreleriyle çağırır ve yeni nesneyi çağırana döndürür.
Özel öznitelik yansıma modeli, kullanıcı tanımlı türlerin örneklerini türün tanımlandığı derlemenin dışına sızdırabilir. Çalışma zamanı sistem kitaplığındaki, Type.GetMethods gibi kullanıcı tanımlı türlerin örneklerini döndüren ve RuntimeMethodInfo nesnelerinin bir dizisini döndüren üyelerden farklı değildir. İstemcinin kullanıcı tanımlı özel öznitelik türüyle ilgili bilgileri bulmasını önlemek için türün üyelerini abonelik dışı olacak şekilde tanımlayın.
Aşağıdaki örnekte, özel özniteliklere erişim elde etmek için yansıma kullanmanın temel yolu gösterilmektedir.
using System;
public class ExampleAttribute : Attribute
{
private string stringVal;
public ExampleAttribute()
{
stringVal = "This is the default string.";
}
public string StringValue
{
get { return stringVal; }
set { stringVal = value; }
}
}
[Example(StringValue="This is a string.")]
class Class1
{
public static void Main()
{
System.Reflection.MemberInfo info = typeof(Class1);
foreach (object attrib in info.GetCustomAttributes(true))
{
Console.WriteLine(attrib);
}
}
}
Public Class ExampleAttribute
Inherits Attribute
Private stringVal As String
Public Sub New()
stringVal = "This is the default string."
End Sub
Public Property StringValue() As String
Get
Return stringVal
End Get
Set(Value As String)
stringVal = Value
End Set
End Property
End Class
<Example(StringValue:="This is a string.")> _
Class Class1
Public Shared Sub Main()
Dim info As System.Reflection.MemberInfo = GetType(Class1)
For Each attrib As Object In info.GetCustomAttributes(true)
Console.WriteLine(attrib)
Next attrib
End Sub
End Class