.NET组件编程(9) 补充 ISupportInitialize

本来不打算写ISupportInitialize的,但是自己总觉得系列不完整,所有还是写下了这篇 ISupportInitialize的文章。其实ISupportInitialize这个接口在Component里也是很有用的,那到底 ISupportInitialize是干什么用的呢?

msdn上的解释为:指定该对象支持对批初始化的简单的事务处理通知。ISupportInitialize 允许控件 为多组属性而优化。因此,可以在设计时初始化相互依赖的属性或批设置多个属性。

ISupportInitialize下有两个方法:BeginInit和EndInit,调用 BeginInit 方法用信号通知对象初始 化即将开始,调用 EndInit 方法用信号通知初始化已完成。

那ISupportInitialize又是如何解决属性之间的依赖关系的呢?请看下面源代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Windows.Forms;

namespace ClassLibrary1
{
     /**//*
     要求:我们需要在Class1初始化完成后去执行Test1方法。
     那我们需要把调用Test1写在哪里呢?
     位置1:不行   因为调用Class1的构造函数的时,属性A和B都还没有赋值。
     位置2:不行   虽然属性A已经赋值,但是属性B还没有值。
     位置3:行     这个时候属性A和B都已经赋值。
     位置4:行     此时所有的属性都赋值完成了。

     那为什么不直接把Test的调用写在位置2或者3上呢?主要原因是:程序员在开发过程中不容易 知道属性赋值的先
     后顺序(即初始化Class1的时候,是先对A赋值还是先对B赋值),而位置4则可以肯定所有的属 性都已经赋过值了。
     */
    public class Class1 : Component, ISupportInitialize
    {
        public Class1()
        {
            // 位置1
        }

        private string _a;
        public string A
        {
            get { return _a; }
            set
            {
                _a = value;
                // 位置2
            }
        }

        private string _b;
        private string B
        {
            get { return _b; }
            set {
                _b = value;
                // 位置3
            }
        }

        // Component开始初始化
        public void BeginInit()
        {

        }

        // Component完成初始化
        public void EndInit()
        {
            _c2.B();    // 位置4
        }

        public void Test1()   // 这个方法依赖属性A和属性B
        {
            MessageBox.Show(A + ":" + B);
        }
    }
}

如果有什么问题,请给我留言或者给我评论。

时间: 2024-10-03 18:46:11

.NET组件编程(9) 补充 ISupportInitialize的相关文章

.NET组件编程(2) PropertyAttribute和EventAttribute

昨天晚上写了基础篇,有朋友说写的太简单,我想在这里申明下:因为我要写组件编程的完整系列, 所以从最简单的开始写起,而且园子里有很多的朋友可能从来都没有写组件的经历,在这里希望有组件开 发经验的朋友能多多包涵. 前一章,我们创建了最简单的组件,今天讲讲Component的PropertyAttribute和EventAttribute. EventAttribute有: BrowsableAttribute .CategoryAttribute.DescriptionAttribute. Defa

065_《Delphi7组件编程参考手册》

<Delphi7组件编程参考手册> Delphi 教程 系列书籍 (065) <Delphi7组件编程参考手册> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Part1 Part2 Part3 Part4 Part5 Part6 Part7 Part8 Part9 Part10 作者: 本书编写组 丛书名: 软件工程师参考手册 出版社:人民邮电出版社 ISBN:7115117071 上架时间:2003-12-16 出版日期:2003 年11月 开本:1

supermap objects6.0 com组件编程

问题描述 supermapobjects6.0com组件编程中的那个工作控件管理控件中对节点的操作怎么用,比如要获得选中数据集的名称,选中数据源的名称,不知道怎么获得,求大家帮帮忙.. 解决方案 解决方案二: 解决方案三:同问,刚学越到这个问题解决方案四:还是用treeview吧!解决方案五:这个问题说简单挺简单,说复杂还是挺复杂的,建议你先好好看看超图基本知识开发内容,确定了超图的基本框架后再给你说估计更简单.上楼说的用TreeView控件是从程序开发角度,肯定的说一定能实现,但也需要借助超图

深入浅出组件编程之固有属性和事件属性

编程 前一章,我们创建了最简单的组件,今天讲讲Component的PropertyAttribute和EventAttribute. EventAttribute有: BrowsableAttribute .CategoryAttribute.DescriptionAttribute.DefaultEventAttribute PropertyAttribute有: BrowsableAttribute .CategoryAttribute.DescriptionAttribute.Defaul

ASP服务器组件编程心得

编程|服务器|心得 作者;小刀 使用ASP编程的一大优点是可以使用众多的服务器组件(ActiveX Server Components).这些组件提供诸如广告轮显(Ad Rotator).浏览器兼容(Browser Capabilities).数据库存取(Database Access).文件超链接(Content Linking).文件存取(File Access)等等功能.使用服务器组件,可以通过非常简单的方式高效率地完成各种复杂的工作. 一般,ASP的各个组件通常使用 Server.Cre

ASP.net组件编程中的两种事件编写方法

asp.net|编程 以下是组件代码:using System;using System.Web.UI;using System.Web.UI.WebControls;using System.ComponentModel; namespace NSEventStudy{ public delegate void TwoEventHandle(int flag); public class EventStudy : System.Web.UI.WebControls.WebControl { /

.NET组件编程(7) Component DesignerAction(智能标记)

Msdn上对DesignerActionList和DesignerAction的介绍为:DesignerAction 功能允许组件和控件显示 区分大小写的信息和命令.DesignerAction 功能可被视为设计器谓词的替代项,因为 DesignerActionItem 可显示在智能标记面板中,也可显示在与组件或控件相关联的快捷菜单中.对于要 在自定义组件和控件中添加智能标记支持的开发人员,DesignerActionList 类表示主交互点. DesignerActionList 是一个基类,

从COM组件调用.NET组件编程实战

在我的编程实践中,需要从.NET的Web Form页面传递加密的字符串信息(如用户名和密码等)到ASP页面,然后在该页面对该加密字符串进行解密.如果传递的不是加密串,通过GET或POST的方式就可以直接传递并在ASP页面中接收,但问题是在.NET的Web Form页面中加了密的字符串如何才能在ASP中进行解密呢?这主要由于ASP并不能直接访问由.NET提供的托管类和组件.这时我们就只能借助于COM组件来实现了,通过COM的互操作我们可通过.NET生成COM组件,然后在ASP页面中访问该COM组件

组件编程技术

从软件业的发展历程来看,程序设计方法经历了多次变革.每当一种程序设计方法不能适应应用软件发展的需要时,人们就会努力寻找一种新的方法来解决这种"软件危机". 组件化程序设计就是程序设计的一种新的变革,它结合了对象技术和组件技术两种特性,更为适合现代企业级应用程序的开发需要.这一节我们将向读者简要地介绍组件和分布式应用程序设计的基础知识.如果您希望了解更多组件化程序设计的知识,请参考这方面论述的专著. 15.1.1 应用程序的体系结构 15.1.2 组件的概念和特点 15.1.3 接口的含