System.ComponentModel 命名空间提供用于实现组件和控件的运行时和设计时行为的类。 此命名空间包括用于特性和类型转换器的实现、数据源绑定和组件授权的基类和接口。
C# 语法优美,特性注释是其中一项,其使用特点如下图。
笔者在学习 ASP.NET Core 时,有很多大神的代码很多地方使用的特性,特性种类很多,o((⊙﹏⊙))o. 有时会很懵逼。所以笔者根据微软的资料整理一下(大部分Copy官方文档)。
此命名空间中的类将划分为以下类别:
之前笔者把一些东西混肴了,类型 [Required] [MaxLength] 这些特性,本质是类,有其构造函数、方法。
ComponentModel 命名空间提供了 System.ComponentModel.DataAnnotations,此命名空间包含数据操作的特性。
后面会详细解释。
[Required] [MaxLength] 等特性,存储在命名空间System.ComponentModel.DataAnnotations 中,笔者列出其他命名空间:
命名空间 | 描述 |
---|---|
System.ComponentModel.Design | 命名空间包含的类可供开发人员用来为组件生成自定义的设计时行为,以及在设计时配置组件所需的用户界面。 设计时环境提供了使开发人员能够安排组件并配置它们的属性的系统。 某些组件可能需要特定的设计时仅有的行为,才能在设计时环境中正常运行。 同时,提供自定义用户界面来帮助开发人员配置组件或复杂数据类型的值,这可能也非常也用。 在此命名空间中定义的类和接口可用于生成组件的设计时行为、访问设计时服务,以及实现自定义的设计时配置接口。 |
System.ComponentModel.Composition | 此命名空间提供构成托管扩展框架 (MEF) 的类的核心的类 |
System.ComponentModel.DataAnnotations | 命名空间提供定义 ASP.NET MVC 和 ASP.NET 数据控件的类的特性 |
System.ComponentModel.Design.Data | 命名空间包含的类可用于为数据相关的组件生成自定义设计时行为 |
System.ComponentModel.Design.Serialization | 命名空间提供在设计时对序列化进行自定义和控制的类型 |
System.ComponentModel.Composition.Hosting | 命名空间提供 Managed Extensibility Framework (MEF) 类型,这些类型对可扩展应用程序的开发人员或宿主都很有用 |
System.ComponentModel.DataAnnotations.Schema | 命名空间为用于定义 ASP.NET MVC 和 ASP.NET 数据控件的元数据的类的特性提供支持 |
System.ComponentModel.Composition.Primitives | 此命名空间提供作为 MEF 编程模型基础的基元类型 |
System.ComponentModel.Composition.Registration | 命名空间包含启用可管理的扩展性框架 (MEF)部件的基于规则的配置的类型 |
System.ComponentModel.Composition.ReflectionModel | 命名空间为使用基于反射的编程模型的设计者提供 Managed Extensibility Framework (MEF) 类型 |
以上内容不能在 System.ComponentModel 命名空间找到,他们都是独立的命名空间。
下面笔者把 System.ComponentModel.DataAnnotations 的特性都列举出来。
官方的描述是命名空间提供定义 ASP.NET MVC 和 ASP.NET 数据控件的类的特性。
这个是我们在网站开发时经常遇到的。在实际使用中,我们可以在控制台、Winform 等项目的 Model 中加此特性,控制属性输入。然而并不是说在控制台也是也能生效,只是能够用到。后面会解释到。
此命名空间的特性包含 [Required]、[Response]、[Phone] 等 ASP.NET Core 数据验证常用的特性。
使用示例(使用时忽略后面的 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(ErrorMessage = "Title is required.")] public object Title;
其他属性还有:
AllowEmptyStrings | 获取或设置一个值,该值指示是否允许空字符串。 |
ErrorMessage | 获取或设置一条在验证失败的情况下与验证控件关联的错误消息。 (Inherited from ValidationAttribute) |
ErrorMessageResourceName | 获取或设置错误消息资源的名称,在验证失败的情况下,要使用该名称来查找ErrorMessageResourceType 属性值。 (Inherited from ValidationAttribute) |
ErrorMessageResourceType | 获取或设置在验证失败的情况下用于查找错误消息的资源类型。 (Inherited from ValidationAttribute) |
ErrorMessageString | 获取本地化的验证错误消息。 (Inherited from ValidationAttribute) |
RequiresValidationContext | 获取指示特性是否要求验证上下文的值。 (Inherited from ValidationAttribute) |
TypeId | 在派生类中实现时,获取此 Attribute 的唯一标识符。 (Inherited from Attribute) |
Equals(Object) | 返回一个值,该值指示此实例是否与指定的对象相等。 (Inherited from Attribute) |
FormatErrorMessage(String) | 基于发生错误的数据字段对错误消息应用格式设置。 (Inherited from ValidationAttribute) |
GetHashCode() | 返回此实例的哈希代码。 (Inherited from Attribute) |
GetType() | 获取当前实例的 Type。 (Inherited from Object) |
GetValidationResult(Object, ValidationContext) | 检查指定的值对于当前的验证特性是否有效。 (Inherited from ValidationAttribute) |
IsDefaultAttribute() | 在派生类中重写时,指示此实例的值是否是派生类的默认值。 (Inherited from Attribute) |
IsValid(Object) | 检查必填数据字段的值是否不为空。 |
IsValid(Object, ValidationContext) | 根据当前的验证特性来验证指定的值。 (Inherited from ValidationAttribute) |
Match(Object) | 当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。 (Inherited from Attribute) |
MemberwiseClone() | 创建当前 Object 的浅表副本。 (Inherited from Object) |
ToString() | 返回表示当前对象的字符串。 (Inherited from Object) |
Validate(Object, String) | 验证指定的对象。 (Inherited from ValidationAttribute) |
Validate(Object, ValidationContext) | 验证指定的对象。 (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; } } }
笔者暂时不清楚特性的方法应用场景,只了解到 特性的属性 的使用。
其他命名空间可以到官方文档查看。
为 AddingNew 事件提供数据。 | |
指定要传递给属性的值,以使该属性从另一个源中获取其值。 这称为“环境”。 此类不能被继承。 | |
提供将 Array 对象与其他各种表示形式相互转换的类型转换器。 | |
为 MethodNameCompleted 事件提供数据。 | |
跟踪异步操作的生存期。 | |
提供支持异步方法调用的类的并发管理。 此类不能被继承。 | |
表示特性的集合。 | |
启用特性重定向。 此类不能被继承。 | |
在单独的线程上执行操作。 | |
提供非浮点数字类型的基类型转换器。 | |
指定成员是否通常用于绑定。 此类不能被继承。 | |
提供支持数据绑定的泛型集合。 | |
提供将 Boolean 对象与其他各种表示形式相互转换的类型转换器。 | |
指定某一属性或事件是否应在“属性”窗口中显示。 | |
提供用于在 8 位无符号整数对象与其他各种表示形式之间实现相互转换的类型转换器。 | |
为可取消的事件提供数据。 | |
指定当属性或事件显示在一个设置为“按分类顺序”模式的 PropertyGrid 控件中时,用于对属性或事件分组的类别的名称。 | |
提供用于在 Unicode 字符对象与其他各种表示形式之间实现相互转换的类型转换器。 | |
为 CollectionChanged 事件提供数据。 | |
提供用于在集合对象与其他各种表示形式之间实现相互转换的类型转换器。 | |
指定一个组件的数据源和数据成员属性,该组件支持复杂数据绑定。 此类不能被继承。 | |
提供 IComponent 接口的基实现并启用应用程序之间的对象共享。 | |
为 IComponent 对象的集合提供只读容器。 | |
提供将组件与各种其他表示形式相互转换的类型转换器。 | |
提供自定义组件编辑器的基类。 | |
提供组件或对象的枚举资源的简单功能。 ComponentResourceManager 类是一个 ResourceManager。 | |
封装零个或更多个组件。 | |
为容器筛选服务提供基类。 | |
提供将 CultureInfo 对象与其他各种表示形式相互转换的类型转换器。 | |
提供 WeakEventManager 实现,以便可以使用“弱事件侦听器”模式附加 CurrentChanged 事件的侦听器。 | |
提供 CurrentChanging 事件的有关信息。 | |
提供 WeakEventManager 实现,以便可以使用“弱事件侦听器”模式附加 CurrentChanging 事件的侦听器。 | |
提供 ICustomTypeDescriptor 接口的简单默认实现。 | |
为 ErrorsChanged 事件提供数据。 | |
将某一类型标识为适合绑定到 ObjectDataSource 对象的对象。 此类不能被继承。 | |
为表示数据字段的属性提供元数据。 此类不能被继承。 | |
标识由某一类型公开的数据操作方法,该方法所执行的操作类型以及该方法是否是默认的数据方法。 此类不能被继承。 | |
提供将 DateTime 对象与其他各种表示形式相互转换的类型转换器。 | |
提供将 DateTimeOffset 结构与其他各种表示形式相互转换的类型转换器。 | |
提供将 Decimal 对象与其他各种表示形式相互转换的类型转换器。 | |
指定组件的默认绑定属性。 此类不能被继承。 | |
指定组件的默认事件。 | |
指定组件的默认属性。 | |
指定属性的默认值。 | |
提供用于说明依赖属性的其他属性特征的 PropertyDescriptor 的扩展。 | |
指定属性或事件的说明。 | |
指定用于为组件实现设计时服务的类。 | |
指定类设计器属于某一类别。 | |
提供用于与设计器进行通信的附加属性。 | |
指定在设计时序列化组件上的属性时所使用的持久性类型。 | |
指定某个属性是否只能在设计时设置。 | |
DesignTimeVisibleAttribute 标记组件的可见性。 如果存在 Yes,可视化设计器即可在设计器上显示该组件。 | |
指定属性、事件或不采用任何参数的公共 void 方法的显示名称。 | |
提供将双精度浮点数字对象与各种其他表示形式相互转换的类型转换器。 | |
为 DoWork 事件处理程序提供数据。 | |
指定用于更改属性的编辑器。 此类不能被继承。 | |
指定可在编辑器中查看的属性或方法。 此类不能被继承。 | |
提供将 Enum 对象与其他各种表示形式相互转换的类型转换器。 | |
提供 WeakEventManager 实现,以便可以使用弱事件侦听器模式附加 ErrorsChanged 事件的侦听器。 | |
提供有关事件的信息。 | |
表示 EventDescriptor 对象集合。 | |
提供一个简单的委托列表。 此类不能被继承。 | |
提供在可扩展对象与其他各种表示形式之间实现转换的类型转换器。 | |
指定由扩展程序提供程序提供的属性。 此类不能被继承。 | |
为描述如何将集合中的项划分为组的类型提供抽象基类。 | |
提供将 Guid 对象与其他各种表示形式相互转换的类型转换器。 | |
为可在事件处理程序中完整处理的事件提供数据。 | |
指定对象没有可以被编辑的子属性。 此类不能被继承。 | |
指示是否已从基类继承与此特性关联的组件。 此类不能被继承。 | |
指定在初始化时引发的事件。 此类不能被继承。 | |
为安装组件的类型指定安装程序。 | |
从 PropertyGrid 中的下拉框中创建特定类型属性的实例。 | |
提供用于在 16 位有符号整数对象与其他表示形式之间实现相互转换的类型转换器。 | |
提供用于在 32 位有符号整数对象与其他表示形式之间实现相互转换的类型转换器。 | |
提供用于在 64 位有符号整数对象与其他各种表示形式之间实现相互转换的类型转换器。 | |
当应执行某个操作的线程不再存在或者没有消息循环时,将引发此异常。 | |
使用无效参数(为枚举数)时引发的异常。 | |
包含有关属性的信息。 | |
为所有许可证提供 abstract 基类。 对组件的特定实例授予许可证。 | |
指定何时可使用授权的对象,并且提供一种方法,用以获取为支持在其域内运行的许可证所需要的附加服务。 | |
表示当组件不能被授予许可证时引发的异常。 | |
提供属性和方法,用以将许可证添加到组件和管理 LicenseProvider。 此类不能被继承。 | |
提供 abstract 基类以便实现许可证提供程序。 | |
指定要与类一起使用的 LicenseProvider。 此类不能被继承。 | |
提供 LicenseProvider 的实现。 提供程序与 Microsoft .NET Framework 标准授权模型的工作方式相似。 | |
指定列表可被用作数据源。 可视化设计器应该使用该特性来确定是否在数据绑定选择器中显示特定的列表。 此类不能被继承。 | |
为 ListChanged 事件提供数据。 | |
提供对应用于数据源的排序操作的说明。 | |
表示 ListSortDescription 对象集合。 | |
指定是否应本地化某一属性。 此类不能被继承。 | |
指定支持基于查找的绑定的属性。 此类不能被继承。 | |
实现 IComponent 并提供可远程控制的组件的基实现,该组件是由值封送的(传递序列化对象的副本)。 | |
表示可由支持掩码的任何数量的控件(如 MaskedTextBox 控件)使用的掩码分析服务。 | |
表示一个类成员,例如某个属性或事件。 这是一个抽象基类。 | |
指定该属性能与“属性”窗口中属于其他对象的属性组合。 | |
提供将多行字符串转换为单行字符串的类型转换器。 | |
提供 INestedContainer 接口的基实现,该接口使容器可以拥有一个所属组件。 | |
指示当此特性应用到的属性的值被修改时,通知父属性。 此类不能被继承。 | |
提供可以为 null 的类型与其基础基元类型之间的自动转换。 | |
指示关联属性的名称在“属性”窗口中显示时是否带有括号。 此类不能被继承。 | |
指示对象的文本表示形式被星号等字符隐匿。 此类不能被继承。 | |
为 ProgressChanged 事件提供数据。 | |
为 PropertyChanged 事件提供数据。 | |
提供 WeakEventManager 实现,以便可以使用“弱事件侦听器”模式附加 PropertyChanged 事件的侦听器。 | |
为 PropertyChanging 事件提供数据。 | |
提供类的属性的抽象。 | |
表示 PropertyDescriptor 对象集合。 | |
指定哪些属性应由类型描述符报告,尤其是 GetProperties(Object) 方法。 | |
标识要为指定的类显示的属性选项卡。 | |
指定 IExtenderProvider 的实施者提供给其他组件的属性的名称。 无法继承此类 | |
指定该特性所绑定到的属性是只读属性还是读/写属性。 无法继承此类 | |
指定该属性可以用作应用程序设置。 | |
提供将对象引用与其他表示形式相互转换的类型转换器。 | |
为 Refreshed 事件提供数据。 | |
指示关联的属性值更改时应刷新属性网格。 此类不能被继承。 | |
指定在安装程序集时是否应调用 Visual Studio 自定义操作安装程序或 Installutil.exe (安装程序工具)。 | |
为 MethodNameCompleted 事件提供数据。 | |
提供用于在 8 位无符号整数对象与字符串之间实现相互转换的类型转换器。 | |
指定何时可将组件属性绑定到应用程序设置。 | |
提供将单精度浮点数字对象与各种其他表示形式相互转换的类型转换器。 | |
表示 SortDescription 对象的集合。 | |
提供用于在字符串对象与其他表示形式之间实现相互转换的类型转换器。 | |
提供方法来验证计算机名称和路径是否符合特定语法。 此类不能被继承。 | |
提供将 TimeSpan 对象与其他表示形式相互转换的类型转换器。 | |
表示工具箱项的特性。 | |
为工具箱项指定要使用的筛选器字符串和筛选器类型。 | |
提供一种将值的类型转换为其他类型以及访问标准值和子属性的统一方法。 | |
表示一个 abstract 类,该类为没有属性的对象提供属性。 | |
表示值的集合。 | |
指定对于此属性绑定到的对象要使用哪种类型作为转换器。 | |
向 TypeDescriptor 提供补充元数据。 | |
指定类的自定义类型说明提供程序。 此类不能被继承。 | |
提供有关组件特征的信息,如组件的特性、属性和事件。 此类不能被继承。 | |
提供可用于在列表框中填充可用类型的类型转换器。 | |
提供用于在 16 位无符号整数对象与其他表示形式之间实现相互转换的类型转换器。 | |
提供用于在 32 位无符号整数对象与其他各种表示形式之间实现相互转换的类型转换器。 | |
提供用于在 64 位无符号整数对象与其他表示形式之间实现相互转换的类型转换器。 | |
指定按警告(而不是错误)处理的异常。 | |
引发 Win32 错误代码异常。 |
SortDescription | 定义要用作集合的排序条件的方向和属性名。 |
IBindingList | 提供在绑定到数据源时支持复杂方案和简单方案所需的功能。 |
IBindingListView | 通过提供高级排序和筛选功能来扩展 IBindingList 接口。 |
ICancelAddNew | 在向集合添加新项时添加事务性功能。 |
IChangeTracking | 定义用于查询对象的更改和重置已更改状态的机制。 |
ICollectionView | 使集合具有当前记录管理、自定义排序、筛选和分组功能。 |
ICollectionViewFactory | 可以实现集合以创建其数据的视图的接口。 正常情况下,用户代码不在此接口上调用方法。 |
ICollectionViewLiveShaping | 定义能够使 CollectionView 排序,分组和筛选的属性。 |
IComNativeDescriptorHandler | 提供 COM 对象和 TypeDescriptor 之间的顶级映射层。 |
IComponent | 提供全部组件所需的功能。 |
IContainer | 提供容器的功能。 容器是在逻辑上包含零个或多个组件的对象。 |
ICustomTypeDescriptor | 提供为对象提供动态自定义类型信息的接口。 |
IDataErrorInfo | 提供功能,该功能提供用户界面可以绑定的自定义错误信息。 |
IEditableCollectionView | 定义 CollectionView 所实现的方法和属性,用于向集合提供编辑功能。 |
IEditableCollectionViewAddNewItem | 定义 CollectionView 所实现的方法和属性,它们可用于指定添加特定类型的项。 |
IEditableObject | 提供提交或回滚对用作数据源的对象所做更改的功能。 |
IExtenderProvider | 定义将属性扩展到容器中的其他组件的接口。 |
IIntellisenseBuilder | 提供便于检索生成器的名称并显示该生成器的界面。 |
IItemProperties | 定义一个提供对象属性相关信息的属性。 |
IListSource | 向对象提供返回可以绑定到数据源列表的功能。 |
INestedContainer | 提供嵌套容器的功能,嵌套容器逻辑上可包含零个或多个其他组件,且这类容器由父组件拥有。 |
INestedSite | 提供检索组件的完全嵌套名称的能力。 |
INotifyDataErrorInfo | 定义数据实体类可实现以提供自定义同步和异步验证支持的成员。 |
INotifyPropertyChanged | 通知客户端属性值已更改。 |
INotifyPropertyChanging | 通知客户端属性值正在更改。 |
IRaiseItemChangedEvents | 指示类是否将属性更改事件转换为 ListChanged 事件。 |
IRevertibleChangeTracking | 提供对回滚更改的支持 |
ISite | 提供站点所需的功能。 |
ISupportInitialize | 指定该对象支持对批初始化的简单的事务处理通知。 |
ISupportInitializeNotification | 允许协调组件及其依赖属性的初始化。 |
ISynchronizeInvoke | 提供同步或异步执行委托的方法。 |
ITypeDescriptorContext | 提供有关组件的上下文信息,如其容器和属性描述符。 |
ITypedList | 提供发现可绑定列表架构的功能,其中可用于绑定的属性不同于要绑定到的对象的公共属性。 |
BindableSupport | 指定值来表示是否可以将属性绑定到数据元素或另一个属性。 |
BindingDirection | 指定模板是否可以用一种方式或两种方式绑定。 |
CollectionChangeAction | 指定如何更改集合。 |
DataObjectMethodType | 根据应用于某方法的 DataObjectMethodAttribute 的指定,标识该方法所执行的数据操作类型。 |
DesignerSerializationVisibility | 指定属性对设计时序列化程序所具有的可见性。 |
EditorBrowsableState | 从编辑器内指定属性或方法的可浏览状态。 |
InheritanceLevel | 定义继承级别类型的标识符。 |
LicenseUsageMode | 指定何时可以使用 License。 |
ListChangedType | 指定列表的更改方式。 |
ListSortDirection | 指定排序操作的方向。 |
MaskedTextResultHint | 指定简洁描述掩码文本分析操作结果的值。 |
NewItemPlaceholderPosition | 指定新项的占位符在集合中的显示的位置。 |
PropertyFilterOptions | 指定哪些属性应由类型描述符报告,尤其是 GetProperties(Object) 方法。此枚举用于指定 Filter 属性的值。 |
PropertyTabScope | 定义指示“属性”窗口中选项卡的持续范围的标识符。 |
RefreshProperties | 定义指示“属性”窗口刷新类型的标识符。 |
ToolboxItemFilterType | 定义用于指示 ToolboxItemFilterAttribute 使用的筛选器类型的标识符。 |
AddingNewEventHandler | 表示用来处理 AddingNew 事件的方法。 |
AsyncCompletedEventHandler | 表示将处理异步操作的 MethodNameCompleted 事件的方法。 |
CancelEventHandler | 表示处理可取消事件的方法。 |
CollectionChangeEventHandler | 表示处理将元素添加到集合中或从集合中移除元素时引发的 CollectionChanged 事件的方法。 |
CurrentChangingEventHandler | 表示 CurrentChanging 事件的处理方法。 |
DoWorkEventHandler | 表示用来处理 DoWork 事件的方法。 此类不能被继承。 |
HandledEventHandler | 表示可以处理事件的方法,这些事件在事件处理程序返回后可能需要或不需要进行进一步处理。 |
ListChangedEventHandler | 表示将处理 IBindingList 类的 ListChanged 事件的方法。 |
ProgressChangedEventHandler | 表示将处理 BackgroundWorker 类的 ProgressChanged 事件的方法。 此类不能被继承。 |
PropertyChangedEventHandler | 表示将处理 PropertyChanged 事件的方法,该事件在更改组件上的属性时引发。 |
PropertyChangingEventHandler | 表示将对 PropertyChanging 接口的 INotifyPropertyChanging 事件进行处理的方法。 |
RefreshEventHandler | |
RunWorkerCompletedEventHandler | 表示将处理 RunWorkerCompleted 类的 BackgroundWorker 事件的方法。 |
到此这篇关于C#命名空间System.ComponentModel属性方法汇总的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。