因此System.Type
有一个名为Attributes的实例方法。
public TypeAttributes Attributes { get; }
返回enum
类型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
到底是什么意思?我猜它不是一个带掩码的值,因为它是一个枚举,它只返回枚举的一个成员。这不是{{1}}类的静态属性,那究竟是什么呢?
答案 0 :(得分:2)
你错了。它标记为我猜这不是一个带位掩码的值
FlagsAttribute
:
表示可以将枚举视为位字段;也就是说,一组标志。
正如您所指出的,其中许多也可用作属性。那么,为什么暴露?嗯,首先,因为它是这些信息的自然表现。属性(例如IsPublic
)只是为您隐藏位测试。其次,有时它比一系列布尔值传递更方便。
答案 1 :(得分:2)
Type.Attributes
是一个位掩码值。它甚至says so in the documentation。
enum
通常通过使用Flags
属性进行装饰来用作标记数据类型。
Type
的那些属性,如IsPublic
,IsClass
等,只需检查这些标志并返回一个布尔值。您可以通过使用反射器查看定义来自己查看。
IsPublic
,例如做类似的事情:
public bool IsPublic {
get {
return ((this.Attributes & TypeAttributes.VisibilityMask) == TypeAttributes.Public);
}
}
并非Type
的所有属性都必然代表其中一个标志(如IsEnum
)。
答案 2 :(得分:1)
它是一个位掩码值,其中值的某些部分代表Type -
的特殊属性myType.Attributes & TypeAttributes.VisibilityMask
为您提供枚举中的几个Public / NonPublic / NestedPublic ...值之一myType.Attributes & TypeAttributes.LayoutMask
为您提供布局类型(Sequential / Explicit / default)等等。