C#委托(入门)

1、语法

步骤

①定义一个委托类型, 如Help

②委托类型实例化为委托实例

③定义函数(与委托类型相匹配的)

④将函数交给委托实例使用

示例一

cs 复制代码
//方法一
void MyFunc1()
{
    Console.WriteLine("Hello");
}

//方法二
void MyFunc2()
{
    Console.WriteLine("World");
}

// 创建委托实例,并将 MyFunc1 方法绑定到委托
var foo = new Foo(MyFunc1);
// 通过 += 操作符将 MyFunc2 方法添加到委托
foo += MyFunc2;
// 调用委托,执行绑定的所有方法;加问号为空不报错
foo?.Invoke();


// 委托声明
delegate void Foo();

示例二

cs 复制代码
void MyFunc1()
{
    Console.WriteLine("Hello");
}
void MyFunc2()
{
    Console.WriteLine("World");
}
Help p;
p = MyFunc1;
p();
p = MyFunc2;
p();

delegate void Help();

//委托就是一个装函数的容器

2、理解委托

普通变量存的是数据,而委托实例存的是行为

个人理解

委托就是用来装函数的

示例一:

cs 复制代码
using System.ComponentModel.Design;

void GoStation(Help do_something)
{
    Console.WriteLine("去火车站");
    Console.WriteLine("找到站长");
    do_something();
    Console.WriteLine("离开火车站");
}

void SayHello()
{
    Console.WriteLine("sayHello");
}

GoStation(SayHello);
delegate void Help();

示例二

cs 复制代码
void GoStation(Help do_something)
{
    Console.WriteLine("去火车站");
    Console.WriteLine("找到站长");
    do_something();
    Console.WriteLine("离开火车站");
}

void SayHello()
{
    Console.WriteLine("sayHello");
}
void HitHim()
{
    Console.WriteLine("HitHim");
}

var p=new Help(SayHello);
p += HitHim;
GoStation(p);
delegate void Help();

3、委托的分类

返回类型和参数列表(类型和个数)相同就是同一种委托。

委托定义时就悄悄规范了接纳的函数

4、委托的简化

微软将委托和泛型结合到一起;

泛型是对类型的抽象,所以结合到一起后,只有参数列表中个数不同

泛型委托的种类只靠参数个数不同来区别

Action 没有返回值;Func有返回值

用Action和Func来代替定义委托类型

示例

用匿名函数代替定义函数

相关推荐
LucianaiB3 分钟前
掌握 Rust:从内存安全到高性能服务的完整技术图谱
开发语言·安全·rust
m0_748240257 分钟前
C++ 游戏开发示例:简单的贪吃蛇游戏
开发语言·c++·游戏
兰亭妙微44 分钟前
2026年UX/UI五大趋势:AI、AR与包容性设计将重新定义用户体验
开发语言·ui·1024程序员节·界面设计·设计趋势
懒羊羊不懒@1 小时前
Java—枚举类
java·开发语言·1024程序员节
m0_748240251 小时前
C++智能指针使用指南(auto_ptr, unique_ptr, shared_ptr, weak_ptr)
java·开发语言·c++
Evand J1 小时前
【MATLAB例程】自适应渐消卡尔曼滤波,背景为二维雷达目标跟踪,基于扩展卡尔曼(EKF)|附完整代码的下载链接
开发语言·matlab·目标跟踪·1024程序员节
百锦再1 小时前
低代码开发的约束性及ABP框架的实践解析
android·开发语言·python·低代码·django·virtualenv·rxjava
csbysj20202 小时前
Scala 字符串
开发语言
自动化小秋葵2 小时前
Python入门经典题目
开发语言·python
编程岁月3 小时前
java面试-0305-java线程调度方法?sleep()和wait()区别?
java·开发语言·面试