技术开发 频道

深入观察 .NET组件模型及继承


    现在创建一个PublisherController和一个PublisherModel,PublisherController 和一个PublisherModel都是从这两个类型继承来的,编译一切,并把它们补充到工具栏。使用设计模式中的PublisherController,我们可以看到过滤器的影响,此影响导致PublisherController构件不能工作。在窗体 (Windows 或者是Web)中发生的情况却完全相反,在窗体 (Windows 或者是Web)中只能激活一个 。





    在完成模式之前,必须考虑一些详情,此详情就是:当拖曳设计器中的构件时,尤其是当构件继承其它构件时,VS.NET是创建构件hierarchies的的方法。

.NET组件模型: 深入探索和继承问题

    当我们为项目补充一个新的构件,我们自动地从基本模板中生成代码。如果将另一个自定义构件拖到代码中,组件代码将表现为下面的情况:
public class Component1 : System.ComponentModel.Component 
{
private Mvc.Tests.Component2 component21;
private System.ComponentModel.IContainer components;

public Component1(System.ComponentModel.IContainer container)
{
container.Add(this);
InitializeComponent();
}

public Component1()
{
InitializeComponent();
}

private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.component21 = new Mvc.Tests.Component2(this.components);

}
}
这里有一个可以利用的private components,意识到这一点非常重要。private components是类型容器,并且被传递到Component2 构造函数。我们也知道此构造函数将做Component1 构造函数所做的事情:把它自己补充到容器:

public Component2(System.ComponentModel.IContainer container) 
{
container.Add(this);
InitializeComponent();
}
    这个构件也包含它自己的components领域,此构件将把components领域传递到另一个构件,我们拖曳它的设计图面,而此设计图面则依次补充它。这个容器类型实现将为引入的构件Site属性(用Add方法)指定一个新创建的ISite,此ISite既指向容器也指向构件。构件可以使用类型Container.Site的Site,以此来知道到底是什么包含了此Site。记住在设计时期时,此Site将被指向DesignSite,在文章前面的介绍中已经解释了。

   此机制为内含包容服务得很好,但是当从其它构件继承构件时,结果会得到一个内含包容的断链,因为基本类型有它自己的components领域。因此我们将有一个与此相似的层次结构。


 


0
相关文章