C#的委托

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;

namespace codeTest
{
    delegate void NumDelegate(int num);
    class Program
    {

        static void Main(string[] args)
        {
            AClass _a = new AClass();
            _a.cwdelegate = _a.AddNum;
            _a.cwdelegate(20);
            NumDelegate num20delegate = new NumDelegate(Add20);
            Console.WriteLine("-------------------------------------------");
            NumDelegate adddelegate =new NumDelegate(_a.AddNum);
            NumDelegate subdelegate = new NumDelegate(_a.SubNum);
            NumDelegate num30delegate = adddelegate + subdelegate;
            num30delegate(30);
            Console.WriteLine("-------------------------------------------");
            num30delegate += num20delegate;
            num30delegate(30);
            Console.WriteLine("-------------------------------------------");
            num30delegate += adddelegate;
            //去掉最后一个adddelegate
            num30delegate -= adddelegate;
            num30delegate(30);
            Console.ReadLine();
        }
        static void Add20(int num)
        {
            Console.WriteLine(string.Format("Add20: {0}", num));
        }
    }

    class AClass
    {
        public int result = 100;
        public delegate void CWDelegate(int num);
        public CWDelegate cwdelegate;
        public void AddNum(int num)
        {
            Console.WriteLine(string.Format("AddNum: {0}",num));
        }

        public void SubNum(int num)
        {
            Console.WriteLine(string.Format("SubNum: {0}", num));
        }
    }

}
时间: 2024-10-17 05:31:38

C#的委托的相关文章

C#中的委托(一)

一.委托 把方法作为参数传给其他方法: 二.声明委托 在C#中使用一个类时,分两个阶段.首先,需要去定义一个类,然后实例化类的一个对象(只需要静态方法除外). 使用委托也需要经过这2个步骤,首先必须定义要使用的委托,对于委托,定义它就是告诉编译器这种类型的委托表示哪种类型的方法.然后,必须创建该委托的一个或多个实例.编译器在后台将创建表示该委托的一个类.定义委托的语法如下: delegate void IntMethodInvoker(int x); 在这个示例中,定义了一个委托IntMetho

c# 三种常见的委托

参考  <编写高质量代码:改善C#程序的157个建议> , 尽量使用FCL中的委托声明. FCL: FrameWork Class Library 三种常用:Action.Func.Predicate 小例子: 1.Action :无返回值 private void AddAction(int a, int b) { Console.WriteLine(a + b); } static void Main(string[] args) { TestCSharpClass myTest = ne

C#控制台基础 返回类型为void的 int 类型参数的委托与拉姆塔表达式

1 code 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication2 8 { 9 //返回类型为void的 int 类型参数的委托 10 public delegate void MyFirst(int num); 11 class P

C# 中的委托和事件

http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html 文中代码在VS2005下通过,由于VS2003(.Net Framework 1.1)不支持隐式的委托变量,所以如果在一个接受委托类型的位置直接赋予方法名,在VS2003下会报错,解决办法是显式的创建一个委托类型的实例(委 托变量).例如:委托类型 委托实例 = new 委托类型(方法名); 欢迎浏览本文的后续文章: C#中的委托和事件(续) 引言 委托 和 事件在

C#中的委托和事件(续)

C#中的委托和事件(续) 引言 如果你看过了 C#中的委托和事件 一文,我想你对委托和事件已经有了一个基本的认识.但那些远不是委托和事件的全部内容,还有很多的地方没有涉及.本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器.异常处理.超时处理和异步方法调用等内容. 为什么要使用事件而不是委托变量? 在 C#中的委托和事件 中,我提出了两个为什么在类型中使用事件向外部提供方法注册,而不是直接使用委托变量的原因.主要是从封装性和易用性上去考虑,但是还漏掉了一点,事件应该

分分搞懂c#中的委托

分分搞懂c#中的委托: 不说废话,不来虚的概念,不管代码是否有意义,看我的优化之路,你会理解委托了: 源代码1 public class test { //我们不管代码是否有意义,我们直接看代码重构和一步步优化的过程 int flage = 1; public void show(int a) { if (flage == 1) { do1(a); } else if (flage == 2) { do2(a); } else if (flage == 3) { do3(a); } else i

(转)C# 中的委托和事件

C# 中的委托和事件 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在.本文中,我将通过两个范例由浅入深地讲述什么是委托.为什么要使用委托.事件的由来..Net Framework中的委托和事件.委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论. 将方法作为方法的参

C#中的委托与事件并存的理由

问题 有了委托为什么还要有事件? 理论上,事件能完成的事情委托完全可以胜任,但是我们思考的这一方面是功能性,我们必须从他们各自的特点分析. 委托链的特点让事件能够被多个订阅方订阅,事件是带上了event关键字的委托,在用reflector反编译事件源码时,我 们看到事件成员的可访问性被始终设置为private,其订阅和移除事件靠方法来完成. 所以,他们的区别出现了: 委托可被任意调用者修改,甚至抹去所有的委托连,而对于事件,只能由订阅者自己决定订阅或者移除事件. 事件的密封性较好,他从本质层面上

C#中的委托(转)

C# 中的委托和事件 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在.本文中,我将通过两个范例由浅入深地讲述什么是委托.为什么要使用委托.事件的由来..Net Framework中的委托和事件.委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论. 将方法作为方法的参

C#中的委托解析

谈及到C#的基本特性,"委托"是不得不去了解和深入分析的一个特性.对于大多数刚入门的程序员谈到"委托"时,都会想到"将方法作为方法的参数进行传递",很多时候都只是知道简单的定义,主要是因为"委托"在理解上有较其他特性比较难的地方.在本次说明中,不会将委托的简单声明和调用作为重点. "委托"不需要直接定义一个要执行的行为,而是将这个行为用某种方法"包含"在一个对象中.这个对象可以像其他任何