İngilizce dilinde oku

Aracılığıyla paylaş


CustomAttributeData Sınıf

Tanım

Yalnızca yansıma bağlamı içine yüklenen derlemeler, modüller, türler, üyeler ve parametreler için özel öznitelik verilerine erişim sağlar.

C#
public class CustomAttributeData
C#
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public sealed class CustomAttributeData
C#
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class CustomAttributeData
Devralma
CustomAttributeData
Öznitelikler

Örnekler

Aşağıdaki örnek, dört oluşturucu ve dört özelliğe sahip özel bir öznitelik tanımlar. Özelliklerden ikisi salt okunur ve oluşturucuların konumsal parametreleri kullanılarak ayarlanır. Diğer iki özellik okuma/yazmadır ve yalnızca adlandırılmış bağımsız değişkenler kullanılarak ayarlanabilir. Konumsal özelliklerden biri dize dizisi, bir adlandırılmış özellik ise tamsayı dizisidir.

özniteliği derlemeye, derlemede bildirilen bir türe, türün bir yöntemine ve yönteminin parametresine uygulanır. Bu durumlar için farklı oluşturucular kullanılır. Yürütülürken, derleme kendisini yalnızca yansıma bağlamı içine yükler ve kendisine ve içerdiği tür ve üyelere uygulanan özel öznitelikler hakkındaki bilgileri görüntüler.

türüne uygulanan öznitelik, hem konumsal hem de adlandırılmış bağımsız değişkenlerle dizi özelliklerini gösterir.

C#
using System;
using System.Reflection;
using System.Collections.Generic;
using System.Collections.ObjectModel;

// The example attribute is applied to the assembly.
[assembly:Example(ExampleKind.ThirdKind, Note="This is a note on the assembly.")]

// An enumeration used by the ExampleAttribute class.
public enum ExampleKind
{
    FirstKind,
    SecondKind,
    ThirdKind,
    FourthKind
};

// An example attribute. The attribute can be applied to all
// targets, from assemblies to parameters.
//
[AttributeUsage(AttributeTargets.All)]
public class ExampleAttribute : Attribute
{
    // Data for properties.
    private ExampleKind kindValue;
    private string noteValue;
    private string[] arrayStrings;
    private int[] arrayNumbers;

    // Constructors. The parameterless constructor (.ctor) calls
    // the constructor that specifies ExampleKind and an array of
    // strings, and supplies the default values.
    //
    public ExampleAttribute(ExampleKind initKind, string[] initStrings)
    {
        kindValue = initKind;
        arrayStrings = initStrings;
    }
    public ExampleAttribute(ExampleKind initKind) : this(initKind, null) {}
    public ExampleAttribute() : this(ExampleKind.FirstKind, null) {}

    // Properties. The Note and Numbers properties must be read/write, so they
    // can be used as named parameters.
    //
    public ExampleKind Kind { get { return kindValue; }}
    public string[] Strings { get { return arrayStrings; }}
    public string Note
    {
        get { return noteValue; }
        set { noteValue = value; }
    }
    public int[] Numbers
    {
        get { return arrayNumbers; }
        set { arrayNumbers = value; }
    }
}

// The example attribute is applied to the test class.
//
[Example(ExampleKind.SecondKind,
         new string[] { "String array argument, line 1",
                        "String array argument, line 2",
                        "String array argument, line 3" },
         Note="This is a note on the class.",
         Numbers = new int[] { 53, 57, 59 })]
public class Test
{
    // The example attribute is applied to a method, using the
    // parameterless constructor and supplying a named argument.
    // The attribute is also applied to the method parameter.
    //
    [Example(Note="This is a note on a method.")]
    public void TestMethod([Example] object arg) { }

    // Main() gets objects representing the assembly, the test
    // type, the test method, and the method parameter. Custom
    // attribute data is displayed for each of these.
    //
    public static void Main()
    {
        Assembly asm = Assembly.ReflectionOnlyLoad("Source");
        Type t = asm.GetType("Test");
        MethodInfo m = t.GetMethod("TestMethod");
        ParameterInfo[] p = m.GetParameters();

        Console.WriteLine("\r\nAttributes for assembly: '{0}'", asm);
        ShowAttributeData(CustomAttributeData.GetCustomAttributes(asm));
        Console.WriteLine("\r\nAttributes for type: '{0}'", t);
        ShowAttributeData(CustomAttributeData.GetCustomAttributes(t));
        Console.WriteLine("\r\nAttributes for member: '{0}'", m);
        ShowAttributeData(CustomAttributeData.GetCustomAttributes(m));
        Console.WriteLine("\r\nAttributes for parameter: '{0}'", p);
        ShowAttributeData(CustomAttributeData.GetCustomAttributes(p[0]));
    }

    private static void ShowAttributeData(
        IList<CustomAttributeData> attributes)
    {
        foreach( CustomAttributeData cad in attributes )
        {
            Console.WriteLine("   {0}", cad);
            Console.WriteLine("      Constructor: '{0}'", cad.Constructor);

            Console.WriteLine("      Constructor arguments:");
            foreach( CustomAttributeTypedArgument cata
                in cad.ConstructorArguments )
            {
                ShowValueOrArray(cata);
            }

            Console.WriteLine("      Named arguments:");
            foreach( CustomAttributeNamedArgument cana
                in cad.NamedArguments )
            {
                Console.WriteLine("         MemberInfo: '{0}'",
                    cana.MemberInfo);
                ShowValueOrArray(cana.TypedValue);
            }
        }
    }

    private static void ShowValueOrArray(CustomAttributeTypedArgument cata)
    {
        if (cata.Value.GetType() == typeof(ReadOnlyCollection<CustomAttributeTypedArgument>))
        {
            Console.WriteLine("         Array of '{0}':", cata.ArgumentType);

            foreach (CustomAttributeTypedArgument cataElement in
                (ReadOnlyCollection<CustomAttributeTypedArgument>) cata.Value)
            {
                Console.WriteLine("             Type: '{0}'  Value: '{1}'",
                    cataElement.ArgumentType, cataElement.Value);
            }
        }
        else
        {
            Console.WriteLine("         Type: '{0}'  Value: '{1}'",
                cata.ArgumentType, cata.Value);
        }
    }
}

/* This code example produces output similar to the following:

Attributes for assembly: 'source, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
   [System.Runtime.CompilerServices.CompilationRelaxationsAttribute((Int32)8)]
      Constructor: 'Void .ctor(Int32)'
      Constructor arguments:
         Type: 'System.Int32'  Value: '8'
      Named arguments:
   [System.Runtime.CompilerServices.RuntimeCompatibilityAttribute(WrapNonExceptionThrows = True)]
      Constructor: 'Void .ctor()'
      Constructor arguments:
      Named arguments:
         MemberInfo: 'Boolean WrapNonExceptionThrows'
         Type: 'System.Boolean'  Value: 'True'
   [ExampleAttribute((ExampleKind)2, Note = "This is a note on the assembly.")]
      Constructor: 'Void .ctor(ExampleKind)'
      Constructor arguments:
         Type: 'ExampleKind'  Value: '2'
      Named arguments:
         MemberInfo: 'System.String Note'
         Type: 'System.String'  Value: 'This is a note on the assembly.'

Attributes for type: 'Test'
   [ExampleAttribute((ExampleKind)1, new String[3] { "String array argument, line 1", "String array argument, line 2", "String array argument, line 3" }, Note = "This is a note on the class.", Numbers = new Int32[3] { 53, 57, 59 })]
      Constructor: 'Void .ctor(ExampleKind, System.String[])'
      Constructor arguments:
         Type: 'ExampleKind'  Value: '1'
         Array of 'System.String[]':
             Type: 'System.String'  Value: 'String array argument, line 1'
             Type: 'System.String'  Value: 'String array argument, line 2'
             Type: 'System.String'  Value: 'String array argument, line 3'
      Named arguments:
         MemberInfo: 'System.String Note'
         Type: 'System.String'  Value: 'This is a note on the class.'
         MemberInfo: 'Int32[] Numbers'
         Array of 'System.Int32[]':
             Type: 'System.Int32'  Value: '53'
             Type: 'System.Int32'  Value: '57'
             Type: 'System.Int32'  Value: '59'

Attributes for member: 'Void TestMethod(System.Object)'
   [ExampleAttribute(Note = "This is a note on a method.")]
      Constructor: 'Void .ctor()'
      Constructor arguments:
      Named arguments:
         MemberInfo: 'System.String Note'
         Type: 'System.String'  Value: 'This is a note on a method.'

Attributes for parameter: 'System.Object arg'
   [ExampleAttribute()]
      Constructor: 'Void .ctor()'
      Constructor arguments:
      Named arguments:
*/

Açıklamalar

Yalnızca yansıma bağlamında incelenen kod yürütülemez, bu nedenle özel özniteliklerin örneklerini oluşturup özelliklerini inceleyerek, MemberInfo.GetCustomAttributesgibi Attribute.GetCustomAttributesyöntemleri kullanarak özel öznitelikleri incelemek her zaman mümkün değildir. Öznitelik türünün kodu yalnızca yansıma bağlamı içine yüklenirse yürütülemez.

sınıfı, CustomAttributeData öznitelikler için bir soyutlama sağlayarak yalnızca yansıma bağlamında özel özniteliklerin incelenmesine olanak tanır. Bu sınıfın üyeleri, özniteliğinin konumsal bağımsız değişkenlerini ve adlandırılmış bağımsız değişkenlerini almak için kullanılabilir. ConstructorArguments Konumsal bağımsız değişkenleri temsil eden yapıların CustomAttributeTypedArgument listesini almak için özelliğini kullanın ve adlandırılmış bağımsız değişkenleri temsil eden yapıların CustomAttributeNamedArgument listesini almak için özelliğini kullanınNamedArguments.

Not

Yapı CustomAttributeNamedArgument yalnızca bağımsız değişken değerini almak ve ayarlamak için kullanılan öznitelik özelliği hakkında bilgi sağlar. Bağımsız değişkenin türünü ve değerini almak için özelliğini kullanarak CustomAttributeNamedArgument.TypedValue bir CustomAttributeTypedArgument yapı elde edin.

Bağımsız değişken için adlandırılmış veya konumsal bir CustomAttributeTypedArgument yapıya sahip olduğunuzda, türünü almak için özelliğini ve CustomAttributeTypedArgument.Value değeri almak için özelliğini kullanınCustomAttributeTypedArgument.ArgumentType.

Not

Bir dizi bağımsız değişkeni için CustomAttributeTypedArgument.Value özelliği, nesnelerin genelini ReadOnlyCollection<T>CustomAttributeTypedArgument döndürür. Koleksiyondaki her CustomAttributeTypedArgument nesne, dizinin karşılık gelen öğesini temsil eder.

CustomAttributeData yürütme bağlamında ve yalnızca yansıma bağlamında kullanılabilir. Örneğin, özel bir özniteliğin kodunu içeren derlemenin yüklenmesini önlemek isteyebilirsiniz. sınıfını CustomAttributeData kullanmak, gibi Attribute.GetCustomAttributesyöntemleri kullanmaktan farklıdır:

  • özellikleri ve yöntemleri CustomAttributeData , oluşturucunun semantiğini değil yalnızca öznitelik örneği için belirtilen değerleri sağlar. Örneğin, bir özniteliğin dize bağımsız değişkeni dahili olarak başka bir gösterime dönüştürülebilir ve kurallı bir biçimde döndürülebilir; veya gerçek öznitelik kodu yürütürken bir özelliğin yan etkileri olabilir.

  • özellikleri ve yöntemleri CustomAttributeData , temel sınıflardan devralınan özel öznitelikleri almanıza izin vermez.

Sınıfının örneklerini CustomAttributeData oluşturmak için (Shared Visual Basic'te) GetCustomAttributes fabrika yöntemlerini kullanın static .

Oluşturucular

CustomAttributeData()

CustomAttributeData sınıfının yeni bir örneğini başlatır.

Özellikler

AttributeType

Özniteliğin türünü alır.

Constructor

Özel özniteliği başlatacak oluşturucuyu temsil eden bir ConstructorInfo nesnesi alır.

ConstructorArguments

Nesne tarafından temsil edilen öznitelik örneği için belirtilen konumsal bağımsız değişkenlerin CustomAttributeData listesini alır.

NamedArguments

Nesne tarafından temsil edilen öznitelik örneği için belirtilen adlandırılmış bağımsız değişkenlerin CustomAttributeData listesini alır.

Yöntemler

Equals(Object)

Bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değeri döndürür.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetCustomAttributes(Assembly)

Hedef derlemeye CustomAttributeData uygulanmış özniteliklerle ilgili verileri temsil eden nesnelerin listesini döndürür.

GetCustomAttributes(MemberInfo)

Hedef üyeye CustomAttributeData uygulanmış özniteliklerle ilgili verileri temsil eden nesnelerin listesini döndürür.

GetCustomAttributes(Module)

Hedef modüle CustomAttributeData uygulanmış özniteliklerle ilgili verileri temsil eden nesnelerin listesini döndürür.

GetCustomAttributes(ParameterInfo)

Hedef parametreye CustomAttributeData uygulanmış özniteliklerle ilgili verileri temsil eden nesnelerin listesini döndürür.

GetHashCode()

Belirli bir tür için karma işlevi olarak görev yapar.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Özel özniteliğin dize gösterimini döndürür.

ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır

Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Ayrıca bkz.