微软即将发布的 visual studio .net 将使程序开发人员获得一个集 成开发环境,它不但为开发传统的 c/c++ 应用程序,而且也为令人振奋 的 microsoft .net 组件提供了丰富的工具。这些以管理代码编写、在通 用语言运行时构建的组件向开发人员提供了一个全新的混合开发环境,即 象 microsoft visual basic 一样容易,而同时又提供了强大的低级编程 能力,与 atl 或 mfc 更加相关。随着以生产效率为中心的管理环境的到 来,它可与传统 com 组件很好地协同工作。开发人员可以将更多时间花 在构建大型组件上,而不用再为内存泄漏、安全和头文件担心。
除了提供microsoft .net framework组件的开发外,visual studio .net (vs .net) 还拥有很多工具,可以让组件利用 vs .net 中设计器架 构的优势来设计出在外观和性能上与 vs .net 所附带组件相近的产品。 在开发管理组件时,在 vs.net 设计器中获得的所有特性都使用组件本身 的 .net framework,从而获得设计时与运行时组件之间的紧密集成。
组件是什么
很显然, microsoft . net framework 组件很容易编写。 让它们与 visual studio . net 设计器一同工作的唯一要求是,它们实现 system. componentmodel.icomponent,即通常表明继承于icomponent的默认应用。 icomponent使组件可跟踪设计时的信息(如它的容器组件或名称)或访问 设计器提供的服务。
让我们编写一个简单的 .net 组件,它的形式如下:
using system; using system.componentmodel; public class booltracker : component { private bool state; private eventhandler handler; private static object eventvaluechanged = new object();
public booltracker() { }
public bool value { get { return state; } set { if (this.state != value) { this.state = value; onvaluechanged(new eventargs()); } } }
public void addonvaluechanged(eventhandler h) { handler = (eventhandler)delegate.combine(handler, h); }
通过一个典型实例可以更容易理解这一概念。比如我们不希望 value 属性在属性浏览器中显示。我们可添加一个元数据属性 system.component model.browsableattribute 来控制一个属性是否可被浏览。
[browsable(false)] public bool value { get { return state; } set { if (this.state != value) { this.state = value; onvaluechanged(new eventargs()); } } }