エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

TypeAttributes 列挙体

2013/12/12

型属性を指定します。

この列挙体には、メンバー値のビットごとの組み合わせを可能にする FlagsAttribute 属性が含まれています。

Namespace:  System.Reflection
アセンブリ:  mscorlib (mscorlib.dll 内)

[FlagsAttribute]
public enum TypeAttributes

メンバー名説明
Abstract型が抽象型であることを指定します。
AnsiClassLPTSTR は ANSI として解釈されます。
AutoClassLPTSTR は自動的に解釈されます。
AutoLayoutクラス フィールドが共通言語ランタイムによって自動的にレイアウトされることを指定します。
BeforeFieldInit型の静的なメソッドを呼び出しても、システムによって型が強制的に初期化されることはないことを指定します。
Class型がクラスであることを指定します。
ClassSemanticsMaskクラスのセマンティクス情報を指定します。現在のクラスはコンテキスト バインド クラスです (そうでない場合は非バインド クラス)。
CustomFormatClassLPSTR は、NotSupportedException のスローを含め、実装に固有の何らかの手段で解釈されます。Microsoft による .NET Framework の実装では使用されません。
CustomFormatMask標準以外のエンコーディング情報を取得し、ネイティブな相互運用性を実現するために使用されます。2 ビットの値が持つ意味は指定されていません。Microsoft による .NET Framework の実装では使用されません。
ExplicitLayoutクラス フィールドが指定されたオフセットでレイアウトされることを指定します。
HasSecurity型にセキュリティが関連付けられています。
Importクラスまたはインターフェイスが別のモジュールからインポートされることを指定します。
Interface型がインターフェイスであることを指定します。
LayoutMaskクラス レイアウト情報を指定します。
NestedAssemblyクラスがアセンブリ参照可能範囲で入れ子になっているため、そのアセンブリ内のメソッドからのみアクセスできることを指定します。
NestedFamANDAssemクラスがアセンブリおよびファミリの参照可能範囲で入れ子になっているため、そのファミリとアセンブリの積集合にあるメソッドからのみアクセスできることを指定します。
NestedFamilyクラスがファミリの参照可能範囲で入れ子になっているため、それ自身の型およびいずれかのサブタイプ内のメソッドからのみアクセスできることを指定します。
NestedFamORAssemクラスがアセンブリまたはファミリの参照可能範囲で入れ子になっているため、そのファミリとアセンブリの和集合にあるメソッドからのみアクセスできることを指定します。
NestedPrivateクラスがプライベートな参照可能範囲で入れ子になっていることを指定します。
NestedPublicクラスがパブリックな参照可能範囲で入れ子になっていることを指定します。
NotPublicクラスがパブリックでないことを指定します。
Publicクラスがパブリックであることを指定します。
ReservedMaskランタイムで使用するために予約された属性。
RTSpecialNameランタイムは名前のエンコード方式を確認する必要があります。
Sealedクラスが具象クラスで、拡張できないことを指定します。
SequentialLayoutクラス フィールドが、メタデータに生成される順序で連続的にレイアウトされることを指定します。
Serializableクラスをシリアル化できることを指定します。
SpecialNameクラスが、その名前で表現されるように特殊であることを指定します。
StringFormatMaskネイティブな相互運用性を得るための文字列情報の取得に使用されます。
UnicodeClassLPTSTR は UNICODE として解釈されます。
VisibilityMask型の参照可能範囲情報を指定します。
WindowsRuntimeWindows ランタイム 型を指定します。

この列挙子クラスのメンバーは、corhdr.h ファイルで定義されている CorTypeAttr 列挙子と一致します。

型属性の使用方法を次の例に示します。いくつか存在するグループのそれぞれには、値が 0 であるメンバーが存在します。つまり、これらのメンバーをテストするには、あらかじめマスクを使用する必要があります。

ほとんどの場合、型属性よりも、Type.IsClassType.IsAutoLayoutType.IsSpecialName などのプロパティを使用した方が簡単です。

メモメモ:

この例を実行するには、「Windows Phone での静的 TextBlock コントロールのあるコード例のビルド」を参照してください。


using System;
using System.Reflection;

internal struct S
{
    public int X;
}

public abstract class Example
{
    protected sealed class NestedClass {}

    public interface INested {}

    private static System.Windows.Controls.TextBlock outputBlock;

    public static void Demo(System.Windows.Controls.TextBlock outputBlock)
    {
        Example.outputBlock = outputBlock;

        DisplayAttributes(typeof(Example));
        DisplayAttributes(typeof(NestedClass));
        DisplayAttributes(typeof(INested));
        DisplayAttributes(typeof(S));
    }

    private static void DisplayAttributes(Type t)
    {
        outputBlock.Text += "Attributes for type "+t.Name+":\n";

        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:
                outputBlock.Text += "   ...is not public\n";
                break;
            case TypeAttributes.Public:
                outputBlock.Text += "   ...is public\n";
                break;
            case TypeAttributes.NestedPublic:
                outputBlock.Text += "   ...is nested and public\n";
                break;
            case TypeAttributes.NestedPrivate:
                outputBlock.Text += "   ...is nested and private\n";
                break;
            case TypeAttributes.NestedFamANDAssem:
                outputBlock.Text += "   ...is nested, and inheritable only within the assembly" +
                   "\n         (cannot be declared in C#)\n";
                break;
            case TypeAttributes.NestedAssembly:
                outputBlock.Text += "   ...is nested and internal\n";
                break;
            case TypeAttributes.NestedFamily:
                outputBlock.Text += "   ...is nested and protected\n";
                break;
            case TypeAttributes.NestedFamORAssem:
                outputBlock.Text += "   ...is nested and protected internal\n";
                break;
        }

        TypeAttributes layout = attr & TypeAttributes.LayoutMask;
        switch (layout)
        {
            case TypeAttributes.AutoLayout:
                outputBlock.Text += "   ...is AutoLayout\n";
                break;
            case TypeAttributes.SequentialLayout:
                outputBlock.Text += "   ...is SequentialLayout\n";
                break;
            case TypeAttributes.ExplicitLayout:
                outputBlock.Text += "   ...is ExplicitLayout\n";
                break;
        }

        TypeAttributes classSemantics = attr & TypeAttributes.ClassSemanticsMask;
        switch (classSemantics)
        {
            case TypeAttributes.Class:
                if (t.IsValueType)
                {
                    outputBlock.Text += "   ...is a value type\n";
                }
                else
                {
                    outputBlock.Text += "   ...is a class\n";
                }
                break;
            case TypeAttributes.Interface:
                outputBlock.Text += "   ...is an interface\n";
                break;
        }

        if (0!=(attr & TypeAttributes.Abstract)) 
        {
            outputBlock.Text += "   ...is abstract\n";
        }

        if (0!=(attr & TypeAttributes.Sealed)) 
        {
            outputBlock.Text += "   ...is sealed\n";
        }
    }
}

/* This example produces 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
 */


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示:
© 2015 Microsoft