委托 作用域-请教关于作用域和委托的问题(附MSDN示例)

问题描述

请教关于作用域和委托的问题(附MSDN示例)

MSDN中使用回调方法检索数据的案例
https://msdn.microsoft.com/zh-cn/library/ts553s52(v=vs.110).aspx

using System;
using System.Threading;

public class ThreadWithState
{
    private string boilerplate;
    private int value;
    private ExampleCallback callback;     

    public ThreadWithState(string text, int number, ExampleCallback callback)
    {
        boilerplate = text;
        value = number;
        this.callback = callback;
    }    

    public void ThreadProc()
    {
        Console.WriteLine(boilerplate, value);
        if (callback != null)
            callback(1);
    }
}

public delegate void ExampleCallback(int lineCount);

public class Example
{
    public static void Main()
    {
        ThreadWithState tws = new ThreadWithState(  "This report displays the number {0}.",42, new ExampleCallback(ResultCallback) ); 

        Thread t = new Thread(new ThreadStart(tws.ThreadProc));
        t.Start();
        Console.WriteLine("Main thread does some work, then waits.");
        t.Join();
        Console.WriteLine( "Independent task has completed; main thread ends.");
    }    

    public static void ResultCallback(int lineCount)
    {
        Console.WriteLine(   "Independent task printed {0} lines.", lineCount);
    }
}

问题1:public delegate void ExampleCallback(int lineCount);这个语句,不在主程序中,也没有包含在其他的类中,为什么可以这样写?不是说“所有可执行的 C# 代码都必须包含在类中”吗?为什么ExampleCallback在public class ThreadWithState{}类中是可见的?
问题2:如果 t.Start()很快就执行完了,那么 t.Join()是否还会起作用?

解决方案

问题1补充:为什么ExampleCallback在public class ThreadWithState{}类中是可见的?

解决方案二:

问题1补充:为什么ExampleCallback在public class ThreadWithState{}类中是可见的?

时间: 2024-11-03 21:14:23

委托 作用域-请教关于作用域和委托的问题(附MSDN示例)的相关文章

javascript作用域: JavaScript的作用域

/***************************************  *其结果是打印出global  ****************************************/  var a = 'global';  ( test(){  write(a);  })();  /***************************************  *其结果是打印出undefined  ****************************************

深入理解javascript作用域第二篇之词法作用域和动态作用域_javascript技巧

前面的话 大多数时候,我们对作用域产生混乱的主要原因是分不清楚应该按照函数位置的嵌套顺序,还是按照函数的调用顺序进行变量查找.再加上this机制的干扰,使得变量查找极易出错.这实际上是由两种作用域工作模型导致的,作用域分为词法作用域和动态作用域,分清这两种作用域模型就能够对变量查找过程有清晰的认识.本文是深入理解javascript作用域系列第二篇--词法作用域和动态作用域 词法作用域 第一篇介绍过,编译器的第一个工作阶段叫作分词,就是把由字符组成的字符串分解成词法单元.这个概念是理解词法作用域

JavaScript深入之词法作用域和动态作用域

作用域 作用域是指程序源代码中定义变量的区域. 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限. JavaScript 采用词法作用域(lexical scoping),也就是静态作用域. 静态作用域与动态作用域 因为 JavaScript 采用的是词法作用域,函数的作用域在函数定义的时候就决定了. 而与词法作用域相对的是动态作用域,函数的作用域是在函数调用的时候才决定的. 让我们认真看个例子就能明白之间的区别: var value = 1; function foo() {

JS语法作用域与词法作用域

原文地址:http://blog.csdn.net/huli870715/article/details/6387243 <script type="text/javascript"> var ClassA = function(){ this.prop1 = 1; }; ClassA.prototype.func1 = function(){ var that = this, var1 = 2; function a(){ return function(){ alert

winform问题,在backgroundwork里使用委托在委托里又用到了委托,结果我的进度条无法显示

问题描述 privatevoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgse){try{//外层的委托this.Invoke(newMethodInvoker(delegate{//判断选中的tab页if(this.tabControl1.SelectedTab.Name=="tabPage1"){//内层的委托newMethodInvoker(delegate{BindGridUp(ds1,ds2);}));}if(th

浅谈javascript中执行环境(作用域)与作用域链_javascript技巧

相信很多初学者对与javascript中的执行环境与作用域链不能很好的理解,这里,我会按照自己的理解同大家一起分享. 一般情况下,我们把执行环境分为全局执行环境和局部执行环境,其中局部执行环境我们又可以称之为函数执行环境.那么究竟什么使执行环境呢?通俗的说,执行环境即为代码执行时所处的环境.我们下来看一看如下代码,再进一步分析之. <script><br>var name="zhuzhenwei"; function changeName(){ if (name

为LINQ服务的C#新特性总结篇---扩展方法,匿名委托,lambda表达式,Action委托,Func委托,Linq中的order by,top和sum函数

Codeusing System;using System.Collections.Generic;using System.Linq;using System.Text; using System.Diagnostics; namespace ConsoleApplication1{    static class Program    {        static void Main(string[] args)        {            //Predicate       

php 变量作用域:js变量作用域

请先看一下代码: var scope = "global";function f() {alert(scope);//dispaly "undefined" not "global"var scope = "local";//Vaeiable initized here,but defined everywherealert(scope);//display "local"}f();为什么了?局部变量在整个

ASP.NET入门随想之多态、接口与委托

asp.net     曾几何时,我们居住的陆地沉睡在海底,大陆也紧密的联系在一起,千百年过去了七大洲的地壳板块在缓缓移动,喜马拉雅山在慢慢增高,世界在变,唯一不变的是变化. ■ 软件开发的悖论 - 把变化变成计划 在软件开发活动的过程中,常被一个悖论所缠绕:不写码就搞不清该做什么:搞不清做什么又不知道该如何写码. 人的思维是很随意的东西,不同的人,或同一个人的不同阶段,对同一件事情的看法都会有差异,可谓是远看成岭侧成峰,远近高低各不同.随意再加上变化,常常引起项目流产或工期大大拖延. 之所以会