Lire en anglais

Partager via


Type.Attributes Propriété

Définition

Obtient les attributs associés à Type.

C#
public System.Reflection.TypeAttributes Attributes { get; }

Valeur de propriété

TypeAttributes

Objet TypeAttributes qui représente l'ensemble d'attributs du Type, à moins que le Type représente un paramètre de type générique, cas dans lequel la valeur est non spécifiée.

Implémente

Exemples

L’exemple suivant utilise la Attributes propriété.

C#
using System;
using System.Reflection;

internal struct S
{
    public int X;
}

public abstract class Example
{
    protected sealed class NestedClass {}

    public interface INested {}

    public static void Main()
    {
        // Create an array of types.
        Type[] types = { typeof(Example), typeof(NestedClass),
                         typeof(INested), typeof(S) };

        foreach (var t in types) 
        {
           Console.WriteLine("Attributes for type {0}:", t.Name);

           TypeAttributes attr = t.Attributes;

           // To test for visibility attributes, you must use the visibility mask.
           TypeAttributes visibility = attr & TypeAttributes.VisibilityMask;
           switch (visibility)
           {
               case TypeAttributes.NotPublic:
                   Console.WriteLine("   ...is not public");
                   break;
               case TypeAttributes.Public:
                   Console.WriteLine("   ...is public");
                   break;
               case TypeAttributes.NestedPublic:
                   Console.WriteLine("   ...is nested and public");
                   break;
               case TypeAttributes.NestedPrivate:
                   Console.WriteLine("   ...is nested and private");
                   break;
               case TypeAttributes.NestedFamANDAssem:
                   Console.WriteLine("   ...is nested, and inheritable only within the assembly" +
                      "\n         (cannot be declared in C#)");
                   break;
               case TypeAttributes.NestedAssembly:
                   Console.WriteLine("   ...is nested and internal");
                   break;
               case TypeAttributes.NestedFamily:
                   Console.WriteLine("   ...is nested and protected");
                   break;
               case TypeAttributes.NestedFamORAssem:
                   Console.WriteLine("   ...is nested and protected internal");
                   break;
           }

           // Use the layout mask to test for layout attributes.
           TypeAttributes layout = attr & TypeAttributes.LayoutMask;
           switch (layout)
           {
               case TypeAttributes.AutoLayout:
                   Console.WriteLine("   ...is AutoLayout");
                   break;
               case TypeAttributes.SequentialLayout:
                   Console.WriteLine("   ...is SequentialLayout");
                   break;
               case TypeAttributes.ExplicitLayout:
                   Console.WriteLine("   ...is ExplicitLayout");
                   break;
           }

           // Use the class semantics mask to test for class semantics attributes.
           TypeAttributes classSemantics = attr & TypeAttributes.ClassSemanticsMask;
           switch (classSemantics)
           {
               case TypeAttributes.Class:
                   if (t.IsValueType)
                   {
                       Console.WriteLine("   ...is a value type");
                   }
                   else
                   {
                       Console.WriteLine("   ...is a class");
                   }
                   break;
               case TypeAttributes.Interface:
                   Console.WriteLine("   ...is an interface");
                   break;
           }

           if ((attr & TypeAttributes.Abstract) != 0)
           {
               Console.WriteLine("   ...is abstract");
           }

           if ((attr & TypeAttributes.Sealed) != 0)
           {
               Console.WriteLine("   ...is sealed");
           }
           
           Console.WriteLine();
       }
    }
}
// The example displays the following output:
// Attributes for type Example:
//    ...is public
//    ...is AutoLayout
//    ...is a class
//    ...is abstract

// Attributes for type NestedClass:
//    ...is nested and protected
//    ...is AutoLayout
//    ...is a class
//    ...is sealed

// Attributes for type INested:
//    ...is nested and public
//    ...is AutoLayout
//    ...is an interface
//    ...is abstract

// Attributes for type S:
//    ...is not public
//    ...is SequentialLayout
//    ...is a value type
//    ...is sealed

Remarques

Certains membres de l' TypeAttributes énumération sont des masques qui représentent un groupe de valeurs. Chaque groupe comprend un membre dont la valeur sous-jacente est égale à zéro. Par exemple, la valeur sous-jacente du TypeAttributes.NotPublic membre dans le TypeAttributes.VisibilityMask groupe est égale à zéro, tout comme le TypeAttributes.AutoLayout membre du TypeAttributes.SequentialLayout groupe. Pour cette raison, vous devez utiliser le masque avant de tester ces valeurs. Cet exemple en fournit une illustration.

Conseil

Dans la plupart des cas, les propriétés telles que IsClass , IsAutoLayout et IsSpecialName sont plus faciles à utiliser que les attributs de type.

Si le actuel Type représente un type générique construit, cette propriété retourne les attributs de la définition de type générique. par exemple, les attributs retournés pour MyGenericClass<int> ( MyGenericClass(Of Integer) dans Visual Basic) sont les attributs de MyGenericClass<T> ( MyGenericClass(Of T) dans Visual Basic).

Si le actuel Type représente un paramètre de type générique, autrement dit, si la IsGenericParameter propriété retourne true -la TypeAttributes valeur retournée par cette propriété n’est pas spécifiée.

S’applique à

Produit Versions
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 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
.NET Standard 2.0, 2.1

Voir aussi