`
JadeLuo
  • 浏览: 409376 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

委托的创建、实例化和调用

    博客分类:
  • C#
 
阅读更多

通过使用 Delegate 类,委托实例可以封装属于可调用实体的方法。

对于实例方法,委托由一个包含类的实例和该实例上的方法组成。

对于静态方法,可调用实体由一个类和该类上的静态方法组成。

因此,委托可用于调用任何对象的函数,而且委托是面向对象的、类型安全的。

定义和使用委托有三个步骤:

  • 声明

  • 实例化

  • 调用


C#可通过使用委托来确定在运行时选择要调用哪些函数。

以下代码演示了委托的创建、实例化和调用:

C#  复制代码 
public class MathClass
{
    public static long Add(int i, int j)       // static
    {
        return (i + j);
    }

    public static long Multiply (int i, int j)  // static
    {
        return (i * j);
    }
}

class TestMathClass
{
    delegate long Del(int i, int j);  // declare the delegate type

    static void Main()
    {
        Del operation;  // declare the delegate variable

        operation = MathClass.Add;       // set the delegate to refer to the Add method
        long sum = operation(11, 22);             // use the delegate to call the Add method

        operation = MathClass.Multiply;  // change the delegate to refer to the Multiply method
        long product = operation(30, 40);         // use the delegate to call the Multiply method

        System.Console.WriteLine("11 + 22 = " + sum);
        System.Console.WriteLine("30 * 40 = " + product);
    }
}


 

输出
11 + 22 = 33 

30 * 40 = 1200 

 

分享到:
评论

相关推荐

    举例讲解C#编程中委托的实例化使用

    在调用多播委托时,它会按顺序调用列表中的委托。只能合并相同类型的委托。 – 运算符可用于从多播委托中移除组件委托。 using System; // Define a custom delegate that has a string parameter and returns void...

    委托各种写法以及详细教程

    实例化类的对象 注意:实例化的时候 必须通过构造函数 传入一个方法 DGSayHi dgSayHi = new DGSayHi(SayHi); //2.1向委托中 添加方法 dgSayHi += SayHi2;//编译后:dgSayHi = (DGSayHi) Delegate.Combine(dgSayHi...

    C#中的delegate委托类型基本学习教程

    在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联。你可以通过委托实例调用方法。 委托用于将方法作为参数传递给其他方法。事件处理程序就是通过委托调用的方法。你可以创建一个自定义方法...

    Delphi开发范例宝典目录

    实例050 动态创建窗体和释放窗体 59 实例051 修改提示字体及颜色 60 1.14 其他技术 61 实例052 窗口融合技术 61 实例053 给MDI窗体加背景 62 实例054 如何关闭MDI类型窗体中的子窗体 63 实例055 向提示...

    【。net 专业】 面试题

    具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。 11.详述.NET里class和struct的异同! class:放在 ? struct放在? struct值传递 类与结构有很多...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    2.7.2 数组的实例化和赋值 45 2.7.3 数组的使用 48 2.7.4 字符串作为数组使用 52 2.7.5 常见数组错误 53 2.8 小结 55 第3章 操作符和控制流 57 3.1 操作符 57 3.1.1 一元操作符正和负 ...

    CLR.via.C#.(中文第3版)(自制详细书签)Part1

    12.6 委托和接口的逆变和协变泛型类型实参 12.7 泛型方法 12.7.1 泛型方法和类型推断 12.8 泛型和其他成员 12.9 可验证性和约束 12.9.1 主要约束 12.9.2 次要约束 12.9.3 构造器约束 12.9.4 其他可验证性...

    CLR.via.C#.(中文第3版)(自制详细书签)

    12.6 委托和接口的逆变和协变泛型类型实参 12.7 泛型方法 12.7.1 泛型方法和类型推断 12.8 泛型和其他成员 12.9 可验证性和约束 12.9.1 主要约束 12.9.2 次要约束 12.9.3 构造器约束 12.9.4 其他可验证性...

    CLR.via.C#.(中文第3版)(自制详细书签)Part3

    12.6 委托和接口的逆变和协变泛型类型实参 12.7 泛型方法 12.7.1 泛型方法和类型推断 12.8 泛型和其他成员 12.9 可验证性和约束 12.9.1 主要约束 12.9.2 次要约束 12.9.3 构造器约束 12.9.4 其他可验证性...

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    12.6 委托和接口的逆变和协变泛型类型实参 12.7 泛型方法 12.7.1 泛型方法和类型推断 12.8 泛型和其他成员 12.9 可验证性和约束 12.9.1 主要约束 12.9.2 次要约束 12.9.3 构造器约束 12.9.4 其他可验证性...

    C#语言规范(4.0版本)

    7.15.5.2 局部变量实例化 207 7.15.6 匿名函数表达式计算 209 7.16 查询表达式 209 7.16.1 查询表达式的多义性 210 7.16.2 查询表达式转换 210 7.16.2.1 带继续符的 select 和 groupby 子句 211 7.16.2.2 显式范围...

    微软C#语言规范,C#语言教程中文版

    7.15.5.2 局部变量实例化 207 7.15.6 匿名函数表达式计算 209 7.16 查询表达式 209 7.16.1 查询表达式的多义性 210 7.16.2 查询表达式转换 210 7.16.2.1 带继续符的 select 和 groupby 子句 211 7.16.2.2 显式范围...

    C#语言规范4.0

    7.15.5.2 局部变量实例化 207 7.15.6 匿名函数表达式计算 209 7.16 查询表达式 209 7.16.1 查询表达式的多义性 210 7.16.2 查询表达式转换 210 7.16.2.1 带继续符的 select 和 groupby 子句 211 7.16.2.2 显式范围...

    C#_语言规范_4.0_中文版

    7.15.5.2 局部变量实例化 207 7.15.6 匿名函数表达式计算 209 7.16 查询表达式 209 7.16.1 查询表达式的多义性 210 7.16.2 查询表达式转换 210 7.16.2.1 带继续符的 select 和 groupby 子句 211 7.16.2.2 显式范围...

    C#语言规范(2.0,3.0,4.0合集)

    7.6.10.5 委托创建表达式 174 7.6.10.6 匿名对象创建表达式 175 7.6.11 typeof 运算符 177 7.6.12 checked 和 unchecked 运算符 178 7.6.13 默认值表达式 180 7.6.14 匿名方法表达式 181 7.7 一元运算符 181 7.7.1 ...

Global site tag (gtag.js) - Google Analytics