TypeAttributes Výčet
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Určuje atributy typu.
Tento výčet podporuje bitové kombinace hodnot jeho členů.
public enum class TypeAttributes
[System.Flags]
public enum TypeAttributes
[System.Flags]
[System.Serializable]
public enum TypeAttributes
[System.Flags]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum TypeAttributes
[<System.Flags>]
type TypeAttributes =
[<System.Flags>]
[<System.Serializable>]
type TypeAttributes =
[<System.Flags>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type TypeAttributes =
Public Enum TypeAttributes
- Dědičnost
- Atributy
Pole
Abstract | 128 | Určuje, že typ je abstraktní. |
AnsiClass | 0 | LPTSTR se interpretuje jako ANSI. |
AutoClass | 131072 | LPTSTR se interpretuje automaticky. |
AutoLayout | 0 | Určuje, že pole tříd se automaticky stanoví modulem CLR (Common Language Runtime). |
BeforeFieldInit | 1048576 | Určuje, že volání statických metod typu nenutí systém inicializovat typ. |
Class | 0 | Určuje, že typ je třída. |
ClassSemanticsMask | 32 | Určuje sémantické informace třídy; aktuální třída je kontextová (jinak agilní). |
CustomFormatClass | 196608 | LPSTR je interpretován některými implementačními prostředky, které zahrnují možnost vyvolání NotSupportedException. Nepoužívá se v implementaci .NET Framework Microsoftu. |
CustomFormatMask | 12582912 | Používá se k načtení nestandardních informací o kódování pro nativní interoperabilitu. Význam hodnot těchto 2 bitů není zadaný. Nepoužívá se v implementaci .NET Framework Microsoftu. |
ExplicitLayout | 16 | Určuje, že pole třídy jsou rozložena na zadaný posun. |
HasSecurity | 262144 | Typ má k němu přidružené zabezpečení. |
Import | 4096 | Určuje, že se třída nebo rozhraní importují z jiného modulu. |
Interface | 32 | Určuje, že typ je rozhraní. |
LayoutMask | 24 | Určuje informace o rozložení třídy. |
NestedAssembly | 5 | Určuje, že třída je vnořena s viditelností sestavení, a proto je přístupná pouze metodami v rámci jeho sestavení. |
NestedFamANDAssem | 6 | Určuje, že třída je vnořena s viditelností sestavení a rodiny, a proto je přístupná pouze metodami v průniku své rodiny a sestavení. |
NestedFamily | 4 | Určuje, že třída je vnořena s viditelností rodiny, a proto je přístupná pouze metodami v rámci vlastního typu a všech odvozených typů. |
NestedFamORAssem | 7 | Určuje, že třída je vnořena s rodinou nebo viditelností sestavení, a proto je přístupná pouze metodami vnořením do sjednocení své rodiny a sestavení. |
NestedPrivate | 3 | Určuje, že třída je vnořená s privátní viditelností. |
NestedPublic | 2 | Určuje, že třída je vnořená s veřejnou viditelností. |
NotPublic | 0 | Určuje, že třída není veřejná. |
Public | 1 | Určuje, že třída je veřejná. |
ReservedMask | 264192 | Atributy rezervované pro použití za běhu |
RTSpecialName | 2048 | Modul runtime by měl kontrolovat kódování názvů. |
Sealed | 256 | Určuje, že třída je betonová a nelze ji rozšířit. |
SequentialLayout | 8 | Určuje, že pole třídy jsou rozložena postupně v pořadí, v jakém byla pole vygenerovány do metadat. |
Serializable | 8192 | Určuje, že třídu lze serializovat. |
SpecialName | 1024 | Určuje, že třída je speciální způsobem označený názvem. |
StringFormatMask | 196608 | Slouží k načtení informací o řetězci pro nativní interoperabilitu. |
UnicodeClass | 65536 | LPTSTR se interpretuje jako UNICODE. |
VisibilityMask | 7 | Určuje informace o viditelnosti typu. |
WindowsRuntime | 16384 | Určuje typ prostředí Windows Runtime. |
Příklady
Následující příklad načte hodnotu Attributes vlastnosti pro Type objekty, které představují řadu různých typů, a pak určuje, zda byly nastaveny příznaky jednotlivých atributů.
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
Imports System.Reflection
Friend Structure S
Public X As Integer
End Structure
Public MustInherit Class Example
Protected NotInheritable Class NestedClass
End Class
Public Interface INested
End Interface
Public Shared Sub Main()
' Create an array of types.
Dim types() As Type = { GetType(Example), GetType(NestedClass),
GetType(INested), GetType(S) }
For Each t In types
Console.WriteLine("Attributes for type {0}:", t.Name)
Dim attr As TypeAttributes = t.Attributes
' Use the visibility mask to test for visibility attributes.
Dim visibility As TypeAttributes = attr And TypeAttributes.VisibilityMask
Select Case visibility
Case TypeAttributes.NotPublic:
Console.WriteLine(" ...is not Public")
Case TypeAttributes.Public:
Console.WriteLine(" ...is Public")
Case TypeAttributes.NestedPublic:
Console.WriteLine(" ...is nested and Public")
Case TypeAttributes.NestedPrivate:
Console.WriteLine(" ...is nested and Private")
Case TypeAttributes.NestedFamANDAssem:
Console.WriteLine(" ...is nested, and inheritable only within the assembly" & _
vbLf & " (cannot be declared in Visual Basic)")
Case TypeAttributes.NestedAssembly:
Console.WriteLine(" ...is nested and Friend")
Case TypeAttributes.NestedFamily:
Console.WriteLine(" ...is nested and Protected")
Case TypeAttributes.NestedFamORAssem:
Console.WriteLine(" ...is nested and Protected Friend")
End Select
' Use the layout mask to test for layout attributes.
Dim layout As TypeAttributes = attr And TypeAttributes.LayoutMask
Select Case layout
Case TypeAttributes.AutoLayout:
Console.WriteLine(" ...is AutoLayout")
Case TypeAttributes.SequentialLayout:
Console.WriteLine(" ...is SequentialLayout")
Case TypeAttributes.ExplicitLayout:
Console.WriteLine(" ...is ExplicitLayout")
End Select
' Use the class semantics mask to test for class semantics attributes.
Dim classSemantics As TypeAttributes = attr And TypeAttributes.ClassSemanticsMask
Select Case classSemantics
Case TypeAttributes.Class:
If t.IsValueType Then
Console.WriteLine(" ...is a value type")
Else
Console.WriteLine(" ...is a class")
End If
Case TypeAttributes.Interface:
Console.WriteLine(" ...is an interface")
End Select
If 0 <> (attr And TypeAttributes.Abstract) Then _
Console.WriteLine(" ...is MustInherit")
If 0 <> (attr And TypeAttributes.Sealed) Then _
Console.WriteLine(" ...is NotInheritable")
Console.WriteLine()
Next
End Sub
End Class
' The example displays the following output:
' Attributes for type Example:
' ...is Public
' ...is AutoLayout
' ...is a class
' ...is MustInherit
'
' Attributes for type NestedClass:
' ...is nested and Protected
' ...is AutoLayout
' ...is a class
' ...is NotInheritable
'
' Attributes for type INested:
' ...is nested and Public
' ...is AutoLayout
' ...is an interface
' ...is MustInherit
'
' Attributes for type S:
' ...is not Public
' ...is SequentialLayout
' ...is a value type
' ...is NotInheritable
Poznámky
Některé členy výčtu TypeAttributes
jsou masky, které představují sadu vzájemně se vylučujících atributů. Člen například VisibilityMask
obsahuje NotPublic
, , Public
, NestedPublic``NestedPrivate
, NestedFamily
, NestedAssembly
, , NestedFamANDAssem
, a NestedFamORAssem
členy. Protože každá sada atributů obsahuje člen, jehož podkladová hodnota je nula, měli byste nejprve And
hodnotu masky s konkrétní System.Reflection.TypeAttributes hodnotou načtenou z vlastnosti, jako Type.Attributesje . Následující tabulka uvádí masky a jednotlivé členy, které zahrnují:
Maska | Zahrnuje |
---|---|
Maska viditelnosti | NotPublic Veřejná NestedPublic NestedPrivate Vnořenéfamily NestedAssembly NestedFamANDAssem NestedFamORAssem |
Maska rozložení | Automatický popis Sekvenčnílayout ExplicitLayout |
ClassSemanticsMask | Třída Rozhraní |
StringFormatMask | AnsiClass UnicodeClass Automatická třída CustomFormatClass |
CustomFormatMask | Žádní členové. |
Členové této třídy enumerator se shodují s enumerátorem CorTypeAttr, jak je definováno v souboru corhdr.h.