0

AttributesSystem.Typeというインスタンス メソッドもあります

public TypeAttributes Attributes { get; }

enum型のを返しますTypeAttributes。この列挙型の一部のメンバーを次に示します。

public enum TypeAttributes {
    AnsiClass = 0,
    Class = 0,
    AutoLayout = 0,
    NotPublic = 0,
    Public = 1,
    NestedPublic = 2,
    NestedPrivate = 3,
    NestedFamily = 4,
    NestedAssembly = 5,
    NestedFamANDAssem = 6,
    VisibilityMask = 7,
    NestedFamORAssem = 7,
    SequentialLayout = 8,
    ExplicitLayout = 16,
    LayoutMask = 24,
...
}

しかし一方で、Typeクラスは、この列挙型に表示されるほとんどのものに対してあまりにも多くのプロパティを提供しています:

  • IsPublic
  • IsClass
  • IsNestedFamANDAssem
  • IsAutoLayout
  • ...

では、正確にType.Attributesは何のためにあるのでしょうか。それは列挙型であり、列挙型の単一のメンバーのみを返すため、ビットマスクされた値ではないと思います。そして、これはTypeクラスの静的プロパティではないので、正確には何をしますか?

4

3 に答える 3

2

ビットマスクされた値ではないと思います

あなたは間違っていると思います。それは次のようにマークされていFlagsAttributeます:

列挙型をビット フィールドとして扱うことができることを示します。つまり、一連のフラグです。

ご指摘のとおり、これらの多くはプロパティとしても利用できます。では、なぜ露出するのでしょうか。第一に、これはこの情報の自然な表現だからです。プロパティ (例: IsPublic) は、ビット テストを非表示にするだけです。次に、ブール値の配列よりも値を渡す方が便利な場合があります。

于 2013-02-15T07:36:20.697 に答える
2

Type.Attributesビットマスクされた値です。ドキュメントにもそう書かれています。

enumFlagss は、属性で装飾することにより、フラグ データ型として一般的に使用されます。

などのプロパティはType、これらのフラグをチェックしてブール値を返すだけです。Reflector を使用して定義を見ると、自分で確認できます。IsPublicIsClass

IsPublic、たとえば次のようにします。

public bool IsPublic {
    get {
        return ((this.Attributes & TypeAttributes.VisibilityMask) == TypeAttributes.Public);
    }
}

ただし、 のすべてのプロパティがTypeフラグの 1 つを表すとは限りません ( などIsEnum)。

于 2013-02-15T07:37:15.040 に答える
1

値の一部が Type の特定のプロパティを表すビットマスク値です。

  • myType.Attributes & TypeAttributes.VisibilityMask列挙型からいくつかの Public/NonPublic/NestedPublic... 値のいずれかを返します
  • myType.Attributes & TypeAttributes.LayoutMaskレイアウト タイプを指定します (シーケンシャル/明示的/デフォルト)

等々。

于 2013-02-15T07:42:25.623 に答える