惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
H
Heimdal Security Blog
Jina AI
Jina AI
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
AWS News Blog
AWS News Blog
C
Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Hacker News
The Hacker News
The Cloudflare Blog
Hugging Face - Blog
Hugging Face - Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
S
Securelist
P
Privacy International News Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 聂微东
博客园 - 叶小钗
J
Java Code Geeks
V
V2EX
博客园 - Franky
Spread Privacy
Spread Privacy
K
Kaspersky official blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Simon Willison's Weblog
Simon Willison's Weblog
Project Zero
Project Zero
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
C
Cybersecurity and Infrastructure Security Agency CISA
C
CERT Recently Published Vulnerability Notes
Latest news
Latest news
NISL@THU
NISL@THU
罗磊的独立博客
W
WeLiveSecurity
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园_首页
V
Visual Studio Blog

博客园 - mapserver

MicroOrm.Net和现有ORM产品的对比 MicroOrm.Net(8) Table.Query() - Distinct、Skip & Take MicroOrm.Net(7) Table.Query() - Group By & Having MicroOrm.Net(6) Table.Query() - Join & Order By MicroOrm.Net(5) Table.Query() - Select MicroOrm.Net(4) Table.Query() - Where MicroOrm.Net(3) Database、Table、Column、Expression、Math&MathE MicroOrm.Net(2) 基础及动态特性 MicroOrm.Net(1) 总览 Asp.net服务器控件编程(6) ViewState(二)——ViewState用法和IStateManager Asp.net服务器控件编程(5) 复杂属性 Asp.net服务器控件编程(4) 呈现 Asp.net服务器控件编程(3) ViewState(一)——asp.net控件的精华之一 Asp.net服务器控件编程(2) 来做个热身运动吧 Asp.net服务器控件编程(1) 开篇、基础 Asp.net服务器控件编程 总览 TextDataSource(3) — 请把我的数据更新回去 TextDataSource(2) — 翠花,上“数据” TextDataSource(1) — DataSourceControl内幕
.NET组件编程(10) 补充 ISupportInitialize
mapserver · 2006-04-12 · via 博客园 - mapserver

        本来不打算写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);
        }

    }

}

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