none
c# 组合类的使用? RRS feed

  • 问题

  • c#  中组合类的是怎么使用的呢,有什么特性和意义呢,相关的资料很少,所以求教;说明详细一点,在什么场合下使用等等,谢谢啦;
    efforts..
    2011年2月26日 8:00

答案

  • 你是说组合模式么? 这个多用于写显示控件。比如:
    
    class DisplayItem{ string Text ;}
    
    class MyTextBox : DisplayItem
    
    class MyLabel : DisplayItem
    
    ////调用的时候就可以直接管理和调用父类了
    
    ////首先使用父类容器管理所有的子类对象
    DisplayItem[]  di = new DisplayItem[4];
    
    di [0].Text = new MyTextBox();
    di [1].Text = new MyLabel ();
    di [2].Text = new MyTextBox();
    di [3].Text = new MyLabel ();
    
    ///然后使用父类来进行共同的操作,此时不必知道知道子类的类型。
    int i = 0;
    foreach( DisplayItem crrItem in di)
    {
        crrItem.Text = "text_" + i;
        i++
    }
    
    ////还可以按需从集合抓取某种类型的对象
    var rst = from DisplayItem crrItem
            in di 
            where crrItem.GetType() == typeof(MyTextBox )
            select crrItem;
    
    foreach( DisplayItem crrItem in rst)
    {
        MyTextBox crrTextBox = crrItem as MyTextBox ;
        ////do someth for you crrTextBox 
    }
    
    
    

    信奎爷,无所畏惧!!
    • 已建议为答案 Charles Shao 2011年2月27日 7:52
    • 已标记为答案 Neddy Ren 2011年3月3日 6:23
    2011年2月27日 7:52
  • 您好,Efforts:

    欢迎来到MSDN中文论坛。

    对于组件Component, MSDN的介绍如下:

    Component 是公共语言运行时中按引用封送的所有组件的基类。 Component 可以进行远程处理,并且派生自 MarshalByRefObject 类。 Component 类提供 IComponent 接口的实现。 MarshalByValueComponent 提供按值封送的 IComponent 的实现。

    可以在任何实现 IContainer 接口的对象中承载 Component,并且可以从其容器中查询和获取服务。 容器会为它所包含的每个 Component 创建一个 ISite 容器使用该站点来管理 Component,而 Component 则使用该站点与它的容器进行通信。

    Component 应通过调用其 Dispose 方法来显式释放资源,而不通过隐式调用 Finalize 方法来等待自动内存管理。 当释放一个 Container 时,同时会释放该 Container 中的所有组件。

    在下面的博客文章中,也有一个小小的例子讲解,希望能对你的学习有所帮助:
    http://blog.csdn.net/skyhits2008/archive/2006/11/27/1417178.aspx

    如果您还有问题,请随时告知我们。


    Neddy Ren [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年2月28日 8:46

全部回复

  • 你是说组合模式么? 这个多用于写显示控件。比如:
    
    class DisplayItem{ string Text ;}
    
    class MyTextBox : DisplayItem
    
    class MyLabel : DisplayItem
    
    ////调用的时候就可以直接管理和调用父类了
    
    ////首先使用父类容器管理所有的子类对象
    DisplayItem[]  di = new DisplayItem[4];
    
    di [0].Text = new MyTextBox();
    di [1].Text = new MyLabel ();
    di [2].Text = new MyTextBox();
    di [3].Text = new MyLabel ();
    
    ///然后使用父类来进行共同的操作,此时不必知道知道子类的类型。
    int i = 0;
    foreach( DisplayItem crrItem in di)
    {
        crrItem.Text = "text_" + i;
        i++
    }
    
    ////还可以按需从集合抓取某种类型的对象
    var rst = from DisplayItem crrItem
            in di 
            where crrItem.GetType() == typeof(MyTextBox )
            select crrItem;
    
    foreach( DisplayItem crrItem in rst)
    {
        MyTextBox crrTextBox = crrItem as MyTextBox ;
        ////do someth for you crrTextBox 
    }
    
    
    

    信奎爷,无所畏惧!!
    • 已建议为答案 Charles Shao 2011年2月27日 7:52
    • 已标记为答案 Neddy Ren 2011年3月3日 6:23
    2011年2月27日 7:52
  • 谢谢回复呀,我说错了,应该是组件类; 就是在才c# 中 直接添加的组件类;继承Component,,他是在什么场合下使用呢,等待指点....
    efforts..
    2011年2月28日 1:05
  • 您好,Efforts:

    欢迎来到MSDN中文论坛。

    对于组件Component, MSDN的介绍如下:

    Component 是公共语言运行时中按引用封送的所有组件的基类。 Component 可以进行远程处理,并且派生自 MarshalByRefObject 类。 Component 类提供 IComponent 接口的实现。 MarshalByValueComponent 提供按值封送的 IComponent 的实现。

    可以在任何实现 IContainer 接口的对象中承载 Component,并且可以从其容器中查询和获取服务。 容器会为它所包含的每个 Component 创建一个 ISite 容器使用该站点来管理 Component,而 Component 则使用该站点与它的容器进行通信。

    Component 应通过调用其 Dispose 方法来显式释放资源,而不通过隐式调用 Finalize 方法来等待自动内存管理。 当释放一个 Container 时,同时会释放该 Container 中的所有组件。

    在下面的博客文章中,也有一个小小的例子讲解,希望能对你的学习有所帮助:
    http://blog.csdn.net/skyhits2008/archive/2006/11/27/1417178.aspx

    如果您还有问题,请随时告知我们。


    Neddy Ren [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年2月28日 8:46