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

推荐订阅源

D
Docker
爱范儿
爱范儿
T
The Exploit Database - CXSecurity.com
量子位
T
Tailwind CSS Blog
T
Threatpost
The GitHub Blog
The GitHub Blog
AWS News Blog
AWS News Blog
云风的 BLOG
云风的 BLOG
K
Kaspersky official blog
P
Proofpoint News Feed
博客园 - 司徒正美
L
LangChain Blog
T
Threat Research - Cisco Blogs
C
CERT Recently Published Vulnerability Notes
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
S
Secure Thoughts
The Last Watchdog
The Last Watchdog
Spread Privacy
Spread Privacy
H
Hacker News: Front Page
T
Troy Hunt's Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News
W
WeLiveSecurity
A
Arctic Wolf
Apple Machine Learning Research
Apple Machine Learning Research
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
P
Proofpoint News Feed
T
Tor Project blog
T
The Blog of Author Tim Ferriss
I
Intezer
P
Privacy & Cybersecurity Law Blog
美团技术团队
N
Netflix TechBlog - Medium
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Vulnerabilities – Threatpost
Application and Cybersecurity Blog
Application and Cybersecurity Blog
G
Google Developers Blog
Attack and Defense Labs
Attack and Defense Labs
T
Tenable Blog
月光博客
月光博客
Stack Overflow Blog
Stack Overflow Blog
J
Java Code Geeks
腾讯CDC
Microsoft Security Blog
Microsoft Security Blog
A
About on SuperTechFans
Last Week in AI
Last Week in AI

博客园 - whale

Ajax提交失败,因为输入框带尖括号< listview添加列 - whale - 博客园 局域网中访问xp机器用户名为灰色,不能修改 SQL2005服务启动不了是因为VIA协议启动了 负载测试错误表包含:“未能找到应用阈值规则所需的从属计数器” CString, BSTR, LPCTSTR之间得关系和区别 移动流媒体技术及其应用发展方向(转载) - whale - 博客园 vs2005使用analysis service 项目出现错误尝试读取或写入受保护内存... - whale Excel连接Analysis service2005初始化数据源失败 利用SQL中的递归返回多行数据的连接 SQL Server不能调试存储过程解决方法 文本框放到下拉框上面。 - whale - 博客园 ADO 读取Excel文件数据, 丢失数据或数据错误问题。 最好的.net学习资源 今天开始开发Mobile5.0项目 组件 访问被拒绝 配置错误 不同层的session在timeout后不能跨层访问的原因。 VB运行调试时提示不能修改 .net调试时,计算机调试管理服务被禁用的解决
局部变量的生命周期和委托的关系
whale · 2005-10-28 · via 博客园 - whale

通常,在VB6中,一个在局部变量在这个域外面就会销毁对象,在.NET中,通常也是这样的。
例子,在下面的代码中

public class clsMain
{
public void newListen()
{
  
new clsListen()
}
}


这个函数newListen里面,建立了一个clsListen对象,但没有赋值给任何外部的变量,那么,这个clsListen的实例是不是建立后就销毁了呢。
下面有个例子,这个例子里面一共有3个类,分别是clsMain, sendEvent, clsListen. sendEvent 类有一个静态的事件OnNewEvent, 它的方法ShowNewEvent 里会触发这个事件。

      clsListen类的构造函数中会用处理函数sendEvent_OnNewEvent来侦听sendEvent的OnNewEvent事件。
  clsMain类中有个方法,在这个newListen方法中创建一个clsListen的实例。
再看下面代码:

 1public class sendEvent
 2{
 3public static event System.EventHandler OnNewEvent;
 4        public static void ShowNewEvent(object sender,System.EventArgs e)
 5        {
 6            if(null !=OnNewEvent)
 7            {
 8                OnNewEvent(sender,e);
 9            }

10
11        }
 
12}

13    public class ClsListen
14    {
15        private int _instance;
16        public static int sInt;
17        public ClsListen()
18        {
19            //
20            // TODO: 在此处添加构造函数逻辑
21            //
22            _instance=0;
23        //'    sendEvent.OnNewEvent +=new EventHandler(sendEvent_OnNewEvent);
24        }

25        public void sendEvent_OnNewEvent(object sender,System.EventArgs e)
26        {
27            _instance+=1;
28            sInt++;
29            System.Windows.Forms.MessageBox.Show(_instance.ToString());
30        }

31    }

在上面的代码中,clsListen的实例是在clsMain的一个方法里创建的。创建后是否会销毁呢。那我们再重看看clsMain类,我在这个类的构造函数里面这样写:
public class clsMain
{
 public clsMain()
  {
      newListen()
      sendEvent.showNewEvent()

  }
public void newListen()
{
  
new clsListen()
}
在上面代码中,clsMain先在newListen中创建一个clsListen, 这个clsListen实例是在函数里面的。那照理它应该接着就会销毁了。在接着的语句中会触发一个sendEvent 的事件。

运行以上的代码(还需要在某个main()函数来启动程序并先实例clsMain类。你会发现运行结果是进入了listen的事件处理程序。那就是说,这个listen的实例是真确存在的。

   以后我会讨论对象侦听普通类事件对对象生命周期的影响。怎样才能撤掉这些对象等等。
第一次写东西,希望大家不吝指教以后我会努力写得更简洁完善。