.NET 中的属性与流:深入解析与应用
1. STA 与 MTA 简介
在 COM 编程里,线程通常会属于单线程单元(STA,Single - Threaded Apartment)或者多线程单元(MTA,Multithreaded Apartment)。当线程开始使用 COM 时,就必须选择 STA 或 MTA 模式,并且存在[MTAThread]属性。
2. 互操作性(Interop)
互操作服务定义了许多属性,不过大部分由 CLR 直接处理,因为互操作是运行时的固有特性。由于这些属性仅在其所支持的机制上下文中才有意义,这里就不详细描述了。
3. 自定义属性的定义与使用
- 自定义属性的用途:大多数属性并非运行时或编译器固有的,而是由类库定义,只有在使用相关库或框架时才会生效。在编写框架,特别是基于反射驱动的框架时,定义自定义属性类型是很有用的。例如,单元测试框架通过反射发现测试类,我们可以用属性控制测试运行器的行为;Visual Studio 利用反射发现设计界面上可编辑对象的属性,通过特定属性自定义编辑行为;还能通过属性配置 Visual Studio 静态代码分析工具的规则例外情况。
- 插件模型中的属性应用:在编写可由最终用户扩展的应用程序时,属性很有用。可以支持加载外部程序集来增强应用程序的行为,即插件模型。定义一个属性让插件提供自身描述信息是个不错的选择。使用属性的一个优点是,无需创建插件实例就能获取描述信息,这能在加载插件前向用户展示其详细信息。