내보내기(0) 인쇄
모두 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

TypeAttributes 열거형

2013-12-13

형식 특성을 지정합니다.

이 열거형에는 멤버 값을 비트로 조합할 수 있는 FlagsAttribute 특성이 있습니다.

Namespace:  System.Reflection
어셈블리:  mscorlib(mscorlib.dll)

[FlagsAttribute]
public enum TypeAttributes

멤버 이름설명
Abstract형식을 추상으로 지정합니다.
AnsiClassLPTSTR가 ANSI로 해석됩니다.
AutoClassLPTSTR가 자동으로 해석됩니다.
AutoLayout클래스 필드가 공용 언어 런타임에 의해 자동으로 레이아웃되도록 지정합니다.
BeforeFieldInit형식을 호출하는 정적 메서드가 시스템에서 해당 형식을 강제로 초기화하지 않도록 지정합니다.
Class형식을 클래스로 지정합니다.
ClassSemanticsMask클래스 기능 정보를 지정합니다. 현재 클래스에 컨텍스트를 추가(활성)할 수 있습니다.
CustomFormatClassLPSTR은 NotSupportedException이 발생할 가능성을 비롯하여 구현 방식에 따라 다르게 해석됩니다. .NET Framework의 Microsoft 구현에서는 사용되지 않습니다.
CustomFormatMask네이티브 interop에 대한 비표준 인코딩 정보를 검색하는 데 사용됩니다. 이러한 2비트 값의 의미는 지정되어 있지 않습니다. .NET Framework의 Microsoft 구현에서는 사용되지 않습니다.
ExplicitLayout클래스 필드를 지정한 간격으로 레이아웃하도록 지정합니다.
HasSecurity형식에 관련 보안이 있습니다.
Import클래스나 인터페이스를 다른 모듈에서 가져오도록 지정합니다.
Interface형식을 인터페이스로 지정합니다.
LayoutMask클래스 레이아웃 정보를 지정합니다.
NestedAssembly클래스를 어셈블리 표시 유형으로 중첩시켜 해당 클래스의 어셈블리 내의 메서드에서만 액세스할 수 있도록 지정합니다.
NestedFamANDAssem클래스를 어셈블리와 패밀리 표시 유형으로 중첩시켜 해당 클래스의 패밀리와 어셈블리의 교집합에 있는 메서드에서만 액세스할 수 있도록 지정합니다.
NestedFamily클래스를 패밀리 표시 유형으로 중첩시켜 클래스의 고유한 형식과 다른 하위 형식 내의 메서드에서만 액세스할 수 있도록 지정합니다.
NestedFamORAssem클래스를 패밀리나 어셈블리 표시 유형으로 중첩시켜 해당 클래스의 패밀리나 어셈블리의 합집합 속에 있는 메서드에서만 액세스할 수 있도록 지정합니다.
NestedPrivate클래스를 전용 표시 유형으로 중첩시키도록 지정합니다.
NestedPublic클래스를 공용 표시 유형으로 중첩시키도록 지정합니다.
NotPublic클래스를 공용이 아니도록 지정합니다.
Public클래스를 공용이 되도록 지정합니다.
ReservedMask런타임에 사용하도록 예약된 특성입니다.
RTSpecialName런타임에서 이름 인코딩을 검사해야 합니다.
Sealed클래스를 고정시켜 확장되지 않도록 지정합니다.
SequentialLayout메타 데이터로 필드가 발생하도록 하기 위해 클래스 필드를 순차적으로 레이아웃시키도록 지정합니다.
Serializable클래스를 직렬화할 수 있도록 지정합니다.
SpecialName이름을 사용하여 설명하는 방법으로 클래스를 지정합니다.
StringFormatMask기본 상호 운용성의 문자열 정보를 검색하는 데 사용됩니다.
UnicodeClassLPTSTR가 유니코드로 해석됩니다.
VisibilityMask형식 표시 유형 정보를 지정합니다.
WindowsRuntimeWindows 런타임 형식을 지정합니다.

이 열거자 클래스의 멤버가 corhdr.h 파일에 정의된 CorTypeAttr 열거자와 일치합니다.

다음 예제에서는 형식 특성의 사용법을 보여 줍니다. 여러 개의 그룹화 각각에 값이 0인 멤버가 있는 경우 해당 멤버를 테스트하기 전에 마스크를 사용해야 합니다.

대부분의 경우 Type.IsClass, Type.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

Windows Phone

표시:
© 2015 Microsoft