举报投诉联系我们 手机版 热门标签 编程学
您的位置:编程学 > c#委托的理解 C# 委托

c#委托的理解 C# 委托

2023-02-25 00:18 C#教程

c#委托的理解 C# 委托

c#委托的理解

C#委托是一种特殊的类,它可以引用一个或多个方法,并允许在运行时调用它们。委托是一种引用类型,它可以指向一个方法,而不是存储实际的数据。委托可以将方法作为参数传递给其他方法,这样就可以在运行时动态地调用该方法。

C#中的委托有三个重要的特性:

1. 委托是一种引用类型。
2. 委托可以引用多个方法。
3. 委托可以将方法作为参数传递给其他方法。

C#中的委托有三种不同的形式:单播委托、多播委托和匿名函数。单播委托是最常见的形式,它允许你将一个函数作为参数传递到另一个函数中。多播委托允许你将多个函数作为参数传递到另一个函数中;而匿名函数则允许你在不声明新函数的情况下直接使用代码块来实现功能。

C#中的委托非常有用,因此它已成为.NET Framework中重要的部分。例如,Windows Forms库使用了大量的委托来处理事件响应、UI呈现和图形处理。此外,LINQ也使用了大量的委托来实现对集合进行查询、过滤和转换功能。

总之,C#中的委托是一项非常有用的功能;它使得我们能够在运行时动态地访问和调用代码片断;而这正是.NET Framework中大量库都使用了C#中的委托来实现功能的原因之一。

C# 委托

C#委托

委托是调用方法的对象。我们可以认为委托是函数指针或函数类型。

委托类型定义委托实例可以调用的方法类型。

委托类型定义方法的返回类型及其参数类型。

例子

下面定义一个称为Converter的委托类型:

delegate int Converter (int x); 

Converter 与任何方法与 int 返回类型和单个 int 参数兼容,如:

static int Square (int x) { return x * x; } 

将一个方法分配给一个委托变量创建一个委托实例:

Converter t = Square; 

其可以以与方法相同的方式被调用:

int answer = t(3); // answer is 9 

例2

这里是一个完整的例子:

delegate int Converter (int x); 

class Test { 
    static void Main() { 
        Converter t = Square; // Create delegate instance 
        int result = t(3);    // Invoke delegate 
        Console.WriteLine (result); // 9 
    }
    static int Square (int x) { return x * x; } 
} 

delegate
实例充当调用者的委托:调用者调用delegate
,然后委托调用目标方法。

委托类似于C函数指针。


多播委托

一个委托实例可以引用多个目标方法。

+ + = 运算符合并了委托实例。

例如:

MyDelegate d = methodB; 
d += methodA; 

调用d现在将调用 methodB methodA

将按添加的顺序调用代理。

- -=
运算符从左代表中删除正确的代理操作数操作数。 例如:

d -= methodB; 

调用 d 现在将仅调用 methodA

我们可以为委托分配一个空值:

MyDelegate d = null; 
d += methodB; // Equivalent (when d is null) to d = methodB; 

如果多播委托具有非void返回类型,则调用者从最后一个要调用的方法接收返回值。

前面的方法仍然被调用,但是它们的返回值被丢弃。

所有委托类型隐含地派生自System.MulticastDelegate,它继承自 System.Delegate

实例 vs 静态方法目标

当实例方法分配给委托对象时,委托对象维护方法所属的方法和实例的引用。

System.Delegate 类的Target属性表示此实例。

例如:

public delegate void Printer (int percentComplete);

class Test {
    static void Main() {
        X x = new X();
        Printer p = x.methodA;
        p(1);
        Console.WriteLine (p.Target == x); // True
        Console.WriteLine (p.Method); // Void methodA(Int32)
    }
}
class X {
    public void methodA (int percentComplete) {
        Console.WriteLine (percentComplete);
    }
}
阅读全文
以上是编程学为你收集整理的c#委托的理解 C# 委托全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
  • c#委托的用法 C# 通用委托

    c#委托的用法 C# 通用委托

    2023-02-28 C#教程

    C# 通用委托委托类型可以包含通用类型参数。例如:public delegate T ConverterT (T arg);有了这个定义,我们可以编写一个适用于...

  • c#中输出型参数类型 C# 类型参数

    c#中输出型参数类型 C# 类型参数

    2023-02-27 C#教程

    C#类型参数类型参数可以在类,结构,接口,委托和方法的声明中引入。其他构造(如属性)不能引入类型参数,但可以使用一个。例...

  • c#泛型约束 C# 泛型约束

    c#泛型约束 C# 泛型约束

    2023-02-28 C#教程

    C#泛型约束默认情况下,类型参数可以用任何类型替换。约束可以应用于类型参数,以需要更具体的类型参数。这些是可能的约束:wher...

  • c#对象初始化器 C# 对象初始化

    c#对象初始化器 C# 对象初始化

    2023-02-27 C#教程

    C#对象初始化任何可访问的字段或对象的属性可以在构造之后通过对象初始化器直接设置。例如,考虑下面的类:public class Person ...

  • c#接口的作用 C# 接口

    c#接口的作用 C# 接口

    2023-02-27 C#教程

    C#接口接口提供了一个规范而不是其成员的实现。接口作为定义和实现之间的联系。接口成员都是隐式抽象的。类或结构可以实现多个...

© 2024 编程学 bianchengxue.com 版权所有 联系我们
桂ICP备19012293号-7 返回底部