1,System.ComponentModel
System.ComponentModel 命名空间提供用于实现组件和控件的运行时和设计时行为的类。 此命名空间包括用于特性和类型转换器的实现、数据源绑定和组件授权的基类和接口。
C# 语法优美,特性注释是其中一项,其使用特点如下图。
笔者在学习 ASP.NET Core 时,有很多大神的代码很多地方使用的特性,特性种类很多,o((⊙﹏⊙))o. 有时会很懵逼。所以笔者根据微软的资料整理一下(大部分Copy官方文档)。
此命名空间中的类将划分为以下类别:
- 核心组件类。 Component, IComponent, Container,和IContainer类。
- 组件授权。 License, LicenseManager, LicenseProvider,和LicenseProviderAttribute类。
- 特性。 Attribute 类。
- 说明符和持久性。 TypeDescriptor, EventDescriptor,和PropertyDescriptor类。
- 类型转换器。 TypeConverter 类。
之前笔者把一些东西混肴了,类型 [Required] [MaxLength] 这些特性,本质是类,有其构造函数、方法。
ComponentModel 命名空间提供了 System.ComponentModel.DataAnnotations,此命名空间包含数据操作的特性。
后面会详细解释。
2,特性命名空间与常用类
[Required] [MaxLength] 等特性,存储在命名空间System.ComponentModel.DataAnnotations 中,笔者列出其他命名空间:
命名空间包含的类可供开发人员用来为组件生成自定义的设计时行为,以及在设计时配置组件所需的用户界面。
设计时环境提供了使开发人员能够安排组件并配置它们的属性的系统。
某些组件可能需要特定的设计时仅有的行为,才能在设计时环境中正常运行。
同时,提供自定义用户界面来帮助开发人员配置组件或复杂数据类型的值,这可能也非常也用。
在此命名空间中定义的类和接口可用于生成组件的设计时行为、访问设计时服务,以及实现自定义的设计时配置接口。
以上内容不能在 System.ComponentModel 命名空间找到,他们都是独立的命名空间。
下面笔者把 System.ComponentModel.DataAnnotations 的特性都列举出来。
3,System.ComponentModel.DataAnnotations
官方的描述是命名空间提供定义 ASP.NET MVC 和 ASP.NET 数据控件的类的特性。
这个是我们在网站开发时经常遇到的。在实际使用中,我们可以在控制台、Winform 等项目的 Model 中加此特性,控制属性输入。然而并不是说在控制台也是也能生效,只是能够用到。后面会解释到。
此命名空间的特性包含 [Required]、[Response]、[Phone] 等 ASP.NET Core 数据验证常用的特性。
通过添加在关联类中定义的特性和属性信息,从而扩展某个类的元数据信息。
指定实体成员表示数据关系(如外键关系)。
指定类型是否通常用于绑定。
提供用于比较两个属性的特性。
指定属性参与乐观并发检查。
指定数据字段值是信用卡号。
指定用于验证属性或类实例的自定义验证方法。
指定要与数据字段关联的其他类型的名称。
提供允许为实体分部类的类型和成员指定可本地化字符串的通用特性。
指定作为外键列显示在被引用表中的列。
指定 ASP.NET 动态数据如何显示数据字段以及如何设置数据字段的格式。
指示数据字段是否可编辑。
验证电子邮件地址。
启用 .NET Framework 枚举,以映射到数据列。
验证文件扩展名。
表示用于指定列的筛选行为的特性。
表示唯一标识实体的一个或多个属性。
指定属性中允许的数组或字符串数据的最大长度。
指定要与数据模型类关联的元数据类。
指定属性中允许的数组或字符串数据的最小长度。
指定数据字段值是格式标准的电话号码。
为数据字段的值指定数值范围约束。
指定 ASP.NET 动态数据中的数据字段值必须与指定的正则表达式匹配。
指定数据字段值是必需的。
指定类或数据列是否使用基架。
指定类或数据表是否使用基架。
指定数据字段中允许的字符的最小长度和最大长度。
列的数据类型指定为行版本。
指定动态数据用来显示数据字段的模板或用户控件。
提供 URL 验证。
充当所有验证特性的基类。
描述执行验证检查的上下文。
表示在使用 ValidationAttribute 类的情况下验证数据字段时发生的异常。
表示验证请求的结果的容器。
定义一个帮助器类,在与对象、属性和方法关联的 ValidationAttribute 特性中包含此类时,可使用此类来验证这些项。
使用示例(使用时忽略后面的 Attribute)
using System.ComponentModel.DataAnnotations; namespace XFAISDK.Model.Response { public class ResponseModel { [Required] public int Code { get; set; } public string Result { get; set; } public dynamic Data { get; set; } } }
由于 System.ComponentModel.DataAnnotations 命名空间的特性较多,笔者只以 Required 示范。
Required
[Required]指定数据字段值是必需的,用户输入时不能为空。
他有多种使用形式,
属性
使用方法如下
[Required(ErrorMessage = "Title is required.")] public object Title;
其他属性还有:
获取或设置一个值,该值指示是否允许空字符串。
获取或设置一条在验证失败的情况下与验证控件关联的错误消息。
(Inherited from ValidationAttribute)获取或设置错误消息资源的名称,在验证失败的情况下,要使用该名称来查找ErrorMessageResourceType 属性值。
(Inherited from ValidationAttribute)获取或设置在验证失败的情况下用于查找错误消息的资源类型。
(Inherited from ValidationAttribute)获取本地化的验证错误消息。
(Inherited from ValidationAttribute)获取指示特性是否要求验证上下文的值。
(Inherited from ValidationAttribute)在派生类中实现时,获取此 Attribute 的唯一标识符。
(Inherited from Attribute)方法
返回一个值,该值指示此实例是否与指定的对象相等。
(Inherited from Attribute)基于发生错误的数据字段对错误消息应用格式设置。
(Inherited from ValidationAttribute)返回此实例的哈希代码。
(Inherited from Attribute)获取当前实例的 Type。
(Inherited from Object)检查指定的值对于当前的验证特性是否有效。
(Inherited from ValidationAttribute)在派生类中重写时,指示此实例的值是否是派生类的默认值。
(Inherited from Attribute)检查必填数据字段的值是否不为空。
根据当前的验证特性来验证指定的值。
(Inherited from ValidationAttribute)当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。
(Inherited from Attribute)创建当前 Object 的浅表副本。
(Inherited from Object)返回表示当前对象的字符串。
(Inherited from Object)验证指定的对象。
(Inherited from ValidationAttribute)验证指定的对象。
(Inherited from ValidationAttribute)其方法大多数是继承基类的,使用方法如下
public class ResponseModel { RequiredAttribute RequiredTest = new RequiredAttribute(); public string TestA(object a) { if (RequiredTest.Match(a)) { return "true"; } return "false"; } [Required()] public int Code { get; set; } public string Result { get; set; } public dynamic Data { get; set; } } }
笔者暂时不清楚特性的方法应用场景,只了解到 特性的属性 的使用。
其他命名空间可以到官方文档查看。
4,Classes 类
AddingNewEventArgs
为 AddingNew 事件提供数据。
AmbientValueAttribute
指定要传递给属性的值,以使该属性从另一个源中获取其值。 这称为“环境”。 此类不能被继承。
ArrayConverter
提供将 Array 对象与其他各种表示形式相互转换的类型转换器。
AsyncCompletedEventArgs
为 MethodNameCompleted 事件提供数据。
AsyncOperation
跟踪异步操作的生存期。
AsyncOperationManager
提供支持异步方法调用的类的并发管理。 此类不能被继承。
AttributeCollection
表示特性的集合。
AttributeProviderAttribute
启用特性重定向。 此类不能被继承。
BackgroundWorker
在单独的线程上执行操作。
BaseNumberConverter
提供非浮点数字类型的基类型转换器。
BindableAttribute
指定成员是否通常用于绑定。 此类不能被继承。
BindingList<T>
提供支持数据绑定的泛型集合。
BooleanConverter
提供将 Boolean 对象与其他各种表示形式相互转换的类型转换器。
BrowsableAttribute
指定某一属性或事件是否应在“属性”窗口中显示。
ByteConverter
提供用于在 8 位无符号整数对象与其他各种表示形式之间实现相互转换的类型转换器。
CancelEventArgs
为可取消的事件提供数据。
CategoryAttribute
指定当属性或事件显示在一个设置为“按分类顺序”模式的 PropertyGrid 控件中时,用于对属性或事件分组的类别的名称。
CharConverter
提供用于在 Unicode 字符对象与其他各种表示形式之间实现相互转换的类型转换器。
CollectionChangeEventArgs
为 CollectionChanged 事件提供数据。
CollectionConverter
提供用于在集合对象与其他各种表示形式之间实现相互转换的类型转换器。
ComplexBindingPropertiesAttribute
指定一个组件的数据源和数据成员属性,该组件支持复杂数据绑定。 此类不能被继承。
Component
提供 IComponent 接口的基实现并启用应用程序之间的对象共享。
ComponentCollection
为 IComponent 对象的集合提供只读容器。
ComponentConverter
提供将组件与各种其他表示形式相互转换的类型转换器。
ComponentEditor
提供自定义组件编辑器的基类。
ComponentResourceManager
提供组件或对象的枚举资源的简单功能。 ComponentResourceManager 类是一个 ResourceManager。
Container
封装零个或更多个组件。
ContainerFilterService
为容器筛选服务提供基类。
CultureInfoConverter
提供将 CultureInfo 对象与其他各种表示形式相互转换的类型转换器。
CurrentChangedEventManager
提供 WeakEventManager 实现,以便可以使用“弱事件侦听器”模式附加 CurrentChanged 事件的侦听器。
CurrentChangingEventArgs
提供 CurrentChanging 事件的有关信息。
CurrentChangingEventManager
提供 WeakEventManager 实现,以便可以使用“弱事件侦听器”模式附加 CurrentChanging 事件的侦听器。
CustomTypeDescriptor
提供 ICustomTypeDescriptor 接口的简单默认实现。
DataErrorsChangedEventArgs
为 ErrorsChanged 事件提供数据。
DataObjectAttribute
将某一类型标识为适合绑定到 ObjectDataSource 对象的对象。 此类不能被继承。
DataObjectFieldAttribute
为表示数据字段的属性提供元数据。 此类不能被继承。
DataObjectMethodAttribute
标识由某一类型公开的数据操作方法,该方法所执行的操作类型以及该方法是否是默认的数据方法。 此类不能被继承。
DateTimeConverter
提供将 DateTime 对象与其他各种表示形式相互转换的类型转换器。
DateTimeOffsetConverter
提供将 DateTimeOffset 结构与其他各种表示形式相互转换的类型转换器。
DecimalConverter
提供将 Decimal 对象与其他各种表示形式相互转换的类型转换器。
DefaultBindingPropertyAttribute
指定组件的默认绑定属性。 此类不能被继承。
DefaultEventAttribute
指定组件的默认事件。
DefaultPropertyAttribute
指定组件的默认属性。
DefaultValueAttribute
指定属性的默认值。
DependencyPropertyDescriptor
提供用于说明依赖属性的其他属性特征的 PropertyDescriptor 的扩展。
DescriptionAttribute
指定属性或事件的说明。
DesignerAttribute
指定用于为组件实现设计时服务的类。
DesignerCategoryAttribute
指定类设计器属于某一类别。
DesignerProperties
提供用于与设计器进行通信的附加属性。
DesignerSerializationVisibilityAttribute
指定在设计时序列化组件上的属性时所使用的持久性类型。
DesignOnlyAttribute
指定某个属性是否只能在设计时设置。
DesignTimeVisibleAttribute
DesignTimeVisibleAttribute 标记组件的可见性。 如果存在 Yes,可视化设计器即可在设计器上显示该组件。
DisplayNameAttribute
指定属性、事件或不采用任何参数的公共 void 方法的显示名称。
DoubleConverter
提供将双精度浮点数字对象与各种其他表示形式相互转换的类型转换器。
DoWorkEventArgs
为 DoWork 事件处理程序提供数据。
EditorAttribute
指定用于更改属性的编辑器。 此类不能被继承。
EditorBrowsableAttribute
指定可在编辑器中查看的属性或方法。 此类不能被继承。
EnumConverter
提供将 Enum 对象与其他各种表示形式相互转换的类型转换器。
ErrorsChangedEventManager
提供 WeakEventManager 实现,以便可以使用弱事件侦听器模式附加 ErrorsChanged 事件的侦听器。
EventDescriptor
提供有关事件的信息。
EventDescriptorCollection
表示 EventDescriptor 对象集合。
EventHandlerList
提供一个简单的委托列表。 此类不能被继承。
ExpandableObjectConverter
提供在可扩展对象与其他各种表示形式之间实现转换的类型转换器。
ExtenderProvidedPropertyAttribute
指定由扩展程序提供程序提供的属性。 此类不能被继承。
GroupDescription
为描述如何将集合中的项划分为组的类型提供抽象基类。
GuidConverter
提供将 Guid 对象与其他各种表示形式相互转换的类型转换器。
HandledEventArgs
为可在事件处理程序中完整处理的事件提供数据。
ImmutableObjectAttribute
指定对象没有可以被编辑的子属性。 此类不能被继承。
InheritanceAttribute
指示是否已从基类继承与此特性关联的组件。 此类不能被继承。
InitializationEventAttribute
指定在初始化时引发的事件。 此类不能被继承。
InstallerTypeAttribute
为安装组件的类型指定安装程序。
InstanceCreationEditor
从 PropertyGrid 中的下拉框中创建特定类型属性的实例。
Int16Converter
提供用于在 16 位有符号整数对象与其他表示形式之间实现相互转换的类型转换器。
Int32Converter
提供用于在 32 位有符号整数对象与其他表示形式之间实现相互转换的类型转换器。
Int64Converter
提供用于在 64 位有符号整数对象与其他各种表示形式之间实现相互转换的类型转换器。
InvalidAsynchronousStateException
当应执行某个操作的线程不再存在或者没有消息循环时,将引发此异常。
InvalidEnumArgumentException
使用无效参数(为枚举数)时引发的异常。
ItemPropertyInfo
包含有关属性的信息。
License
为所有许可证提供 abstract 基类。 对组件的特定实例授予许可证。
LicenseContext
指定何时可使用授权的对象,并且提供一种方法,用以获取为支持在其域内运行的许可证所需要的附加服务。
LicenseException
表示当组件不能被授予许可证时引发的异常。
LicenseManager
提供属性和方法,用以将许可证添加到组件和管理 LicenseProvider。 此类不能被继承。
LicenseProvider
提供 abstract 基类以便实现许可证提供程序。
LicenseProviderAttribute
指定要与类一起使用的 LicenseProvider。 此类不能被继承。
LicFileLicenseProvider
提供 LicenseProvider 的实现。 提供程序与 Microsoft .NET Framework 标准授权模型的工作方式相似。
ListBindableAttribute
指定列表可被用作数据源。 可视化设计器应该使用该特性来确定是否在数据绑定选择器中显示特定的列表。 此类不能被继承。
ListChangedEventArgs
为 ListChanged 事件提供数据。
ListSortDescription
提供对应用于数据源的排序操作的说明。
ListSortDescriptionCollection
表示 ListSortDescription 对象集合。
LocalizableAttribute
指定是否应本地化某一属性。 此类不能被继承。
LookupBindingPropertiesAttribute
指定支持基于查找的绑定的属性。 此类不能被继承。
MarshalByValueComponent
实现 IComponent 并提供可远程控制的组件的基实现,该组件是由值封送的(传递序列化对象的副本)。
MaskedTextProvider
表示可由支持掩码的任何数量的控件(如 MaskedTextBox 控件)使用的掩码分析服务。
MemberDescriptor
表示一个类成员,例如某个属性或事件。 这是一个抽象基类。
MergablePropertyAttribute
指定该属性能与“属性”窗口中属于其他对象的属性组合。
MultilineStringConverter
提供将多行字符串转换为单行字符串的类型转换器。
NestedContainer
提供 INestedContainer 接口的基实现,该接口使容器可以拥有一个所属组件。
NotifyParentPropertyAttribute
指示当此特性应用到的属性的值被修改时,通知父属性。 此类不能被继承。
NullableConverter
提供可以为 null 的类型与其基础基元类型之间的自动转换。
ParenthesizePropertyNameAttribute
指示关联属性的名称在“属性”窗口中显示时是否带有括号。 此类不能被继承。
PasswordPropertyTextAttribute
指示对象的文本表示形式被星号等字符隐匿。 此类不能被继承。
ProgressChangedEventArgs
为 ProgressChanged 事件提供数据。
PropertyChangedEventArgs
为 PropertyChanged 事件提供数据。
PropertyChangedEventManager
提供 WeakEventManager 实现,以便可以使用“弱事件侦听器”模式附加 PropertyChanged 事件的侦听器。
PropertyChangingEventArgs
为 PropertyChanging 事件提供数据。
PropertyDescriptor
提供类的属性的抽象。
PropertyDescriptorCollection
表示 PropertyDescriptor 对象集合。
PropertyFilterAttribute
指定哪些属性应由类型描述符报告,尤其是 GetProperties(Object) 方法。
PropertyTabAttribute
标识要为指定的类显示的属性选项卡。
ProvidePropertyAttribute
指定 IExtenderProvider 的实施者提供给其他组件的属性的名称。 无法继承此类
ReadOnlyAttribute
指定该特性所绑定到的属性是只读属性还是读/写属性。 无法继承此类
RecommendedAsConfigurableAttribute
指定该属性可以用作应用程序设置。
ReferenceConverter
提供将对象引用与其他表示形式相互转换的类型转换器。
RefreshEventArgs
为 Refreshed 事件提供数据。
RefreshPropertiesAttribute
指示关联的属性值更改时应刷新属性网格。 此类不能被继承。
RunInstallerAttribute
指定在安装程序集时是否应调用 Visual Studio 自定义操作安装程序或 Installutil.exe (安装程序工具)。
RunWorkerCompletedEventArgs
为 MethodNameCompleted 事件提供数据。
SByteConverter
提供用于在 8 位无符号整数对象与字符串之间实现相互转换的类型转换器。
SettingsBindableAttribute
指定何时可将组件属性绑定到应用程序设置。
SingleConverter
提供将单精度浮点数字对象与各种其他表示形式相互转换的类型转换器。
SortDescriptionCollection
表示 SortDescription 对象的集合。
StringConverter
提供用于在字符串对象与其他表示形式之间实现相互转换的类型转换器。
SyntaxCheck
提供方法来验证计算机名称和路径是否符合特定语法。 此类不能被继承。
TimeSpanConverter
提供将 TimeSpan 对象与其他表示形式相互转换的类型转换器。
ToolboxItemAttribute
表示工具箱项的特性。
ToolboxItemFilterAttribute
为工具箱项指定要使用的筛选器字符串和筛选器类型。
TypeConverter
提供一种将值的类型转换为其他类型以及访问标准值和子属性的统一方法。
TypeConverter.SimplePropertyDescriptor
表示一个 abstract 类,该类为没有属性的对象提供属性。
TypeConverter.StandardValuesCollection
表示值的集合。
TypeConverterAttribute
指定对于此属性绑定到的对象要使用哪种类型作为转换器。
TypeDescriptionProvider
向 TypeDescriptor 提供补充元数据。
TypeDescriptionProviderAttribute
指定类的自定义类型说明提供程序。 此类不能被继承。
TypeDescriptor
提供有关组件特征的信息,如组件的特性、属性和事件。 此类不能被继承。
TypeListConverter
提供可用于在列表框中填充可用类型的类型转换器。
UInt16Converter
提供用于在 16 位无符号整数对象与其他表示形式之间实现相互转换的类型转换器。
UInt32Converter
提供用于在 32 位无符号整数对象与其他各种表示形式之间实现相互转换的类型转换器。
UInt64Converter
提供用于在 64 位无符号整数对象与其他表示形式之间实现相互转换的类型转换器。
WarningException
指定按警告(而不是错误)处理的异常。
Win32Exception
引发 Win32 错误代码异常。
5,Structs 结构体
定义要用作集合的排序条件的方向和属性名。
6,Interfaces 界面
提供在绑定到数据源时支持复杂方案和简单方案所需的功能。
通过提供高级排序和筛选功能来扩展 IBindingList 接口。
在向集合添加新项时添加事务性功能。
定义用于查询对象的更改和重置已更改状态的机制。
使集合具有当前记录管理、自定义排序、筛选和分组功能。
可以实现集合以创建其数据的视图的接口。 正常情况下,用户代码不在此接口上调用方法。
定义能够使 CollectionView 排序,分组和筛选的属性。
提供 COM 对象和 TypeDescriptor 之间的顶级映射层。
提供全部组件所需的功能。
提供容器的功能。 容器是在逻辑上包含零个或多个组件的对象。
提供为对象提供动态自定义类型信息的接口。
提供功能,该功能提供用户界面可以绑定的自定义错误信息。
定义 CollectionView 所实现的方法和属性,用于向集合提供编辑功能。
定义 CollectionView 所实现的方法和属性,它们可用于指定添加特定类型的项。
提供提交或回滚对用作数据源的对象所做更改的功能。
定义将属性扩展到容器中的其他组件的接口。
提供便于检索生成器的名称并显示该生成器的界面。
定义一个提供对象属性相关信息的属性。
向对象提供返回可以绑定到数据源列表的功能。
提供嵌套容器的功能,嵌套容器逻辑上可包含零个或多个其他组件,且这类容器由父组件拥有。
提供检索组件的完全嵌套名称的能力。
定义数据实体类可实现以提供自定义同步和异步验证支持的成员。
通知客户端属性值已更改。
通知客户端属性值正在更改。
指示类是否将属性更改事件转换为 ListChanged 事件。
提供对回滚更改的支持
提供站点所需的功能。
指定该对象支持对批初始化的简单的事务处理通知。
允许协调组件及其依赖属性的初始化。
提供同步或异步执行委托的方法。
提供有关组件的上下文信息,如其容器和属性描述符。
提供发现可绑定列表架构的功能,其中可用于绑定的属性不同于要绑定到的对象的公共属性。
7,Enums 枚举
指定值来表示是否可以将属性绑定到数据元素或另一个属性。
指定模板是否可以用一种方式或两种方式绑定。
指定如何更改集合。
根据应用于某方法的 DataObjectMethodAttribute 的指定,标识该方法所执行的数据操作类型。
指定属性对设计时序列化程序所具有的可见性。
从编辑器内指定属性或方法的可浏览状态。
定义继承级别类型的标识符。
指定何时可以使用 License。
指定列表的更改方式。
指定排序操作的方向。
指定简洁描述掩码文本分析操作结果的值。
指定新项的占位符在集合中的显示的位置。
指定哪些属性应由类型描述符报告,尤其是 GetProperties(Object) 方法。此枚举用于指定 Filter 属性的值。
定义指示“属性”窗口中选项卡的持续范围的标识符。
定义指示“属性”窗口刷新类型的标识符。
定义用于指示 ToolboxItemFilterAttribute 使用的筛选器类型的标识符。
8,Delegates 委托
表示用来处理 AddingNew 事件的方法。
表示将处理异步操作的 MethodNameCompleted 事件的方法。
表示处理可取消事件的方法。
表示处理将元素添加到集合中或从集合中移除元素时引发的 CollectionChanged 事件的方法。
表示 CurrentChanging 事件的处理方法。
表示用来处理 DoWork 事件的方法。 此类不能被继承。
表示可以处理事件的方法,这些事件在事件处理程序返回后可能需要或不需要进行进一步处理。
表示将处理 IBindingList 类的 ListChanged 事件的方法。
表示将处理 BackgroundWorker 类的 ProgressChanged 事件的方法。 此类不能被继承。
表示将处理 PropertyChanged 事件的方法,该事件在更改组件上的属性时引发。
表示将对 PropertyChanging 接口的 INotifyPropertyChanging 事件进行处理的方法。
表示处理当 Refreshed 或组件在设计时被更改时引发的 Type 事件的方法。
表示将处理 RunWorkerCompleted 类的 BackgroundWorker 事件的方法。
到此这篇关于C#命名空间System.ComponentModel属性方法汇总的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持自由互联。