当前位置: 首页 > wzjs >正文

python做简单的网站亚马逊网官网首页

python做简单的网站,亚马逊网官网首页,网站开发 顺德,免费申请网站 免备案1. 委托的基本概念 定义:委托是一种类型安全的函数指针,用于封装方法(静态方法或实例方法)。 核心作用:允许将方法作为参数传递,实现回调机制和事件处理。 类型安全:委托在编译时会检查方法签…

1. 委托的基本概念

  • 定义:委托是一种类型安全的函数指针,用于封装方法(静态方法或实例方法)。

  • 核心作用:允许将方法作为参数传递,实现回调机制和事件处理。

  • 类型安全:委托在编译时会检查方法签名(参数类型和返回值类型)。

2. 委托的声明与使用

  • 声明语法:

delegate [返回类型] DelegateName([参数列表]);

 示例:

delegate void MyDelegate(string message); // 无返回值,接受一个字符串参数
  • 实例化与调用
// 实例化委托(绑定方法)
MyDelegate del = new MyDelegate(MyMethod);// 调用委托
del("Hello");static void MyMethod(string msg) {Console.WriteLine(msg);
}

3. 多播委托(Multicast Delegate)

  • 特点:一个委托实例可以绑定多个方法,通过 += 和 -= 运算符管理方法链。

  • 调用顺序:按添加顺序依次执行所有方法。

  • 返回值:若委托有返回值,只有最后一个方法的返回值会被保留。

MyDelegate del1 = Method1;
MyDelegate del2 = Method2;
MyDelegate combined = del1 + del2; // 合并委托
combined("Multi-cast"); // 依次调用 Method1 和 Method2combined -= del1; // 移除委托

  • 4. 匿名方法与Lambda表达式 

  • 匿名方法(C# 2.0):无需显式定义方法,直接通过 delegate 关键字绑定。
MyDelegate del = delegate(string msg) {Console.WriteLine("Anonymous: " + msg);
};
  • Lambda表达式(C# 3.0+):简化匿名方法的语法。
MyDelegate del = (msg) => Console.WriteLine("Lambda: " + msg);

5. 内置泛型委托

  • Action:无返回值的委托,最多支持16个参数。
Action<string> action = (s) => Console.WriteLine(s);
  • Func:有返回值的委托,最后一个泛型参数为返回值类型,最多支持16个参数(不包括返回值类型)。
Func<int, int, int> add = (a, b) => a + b;
int result = add(3, 5); // 返回8
  • Predicate:返回 bool 的委托,常用于条件判断,仅支持一个参数。
Predicate<int> isEven = num => num % 2 == 0;
bool result = isEven(4); // 返回true

6. 委托与事件

  • 事件本质:事件是基于委托的封装,提供更安全的订阅/取消订阅机制。

  • 事件声明

public event EventHandler MyEvent; // EventHandler 是内置委托
  • 触发事件
MyEvent?.Invoke(this, EventArgs.Empty); // 安全调用
  • 事件与委托的区别:事件不能在类外部赋值和调用,只能在声明它的类内部触发(Invoke),外部只能订阅(+=)或取消订阅(-=)。

7. 协变与逆变(Covariance & Contravariance)

  • 协变(Covariance):允许委托返回类型是派生类(更具体类型)。(父类泛型委托装子类泛型委托)
delegate Animal GetAnimalDelegate();
GetAnimalDelegate del = GetDog; // Dog 是 Animal 的子类
Animal animal = del();static Dog GetDog() => new Dog();
  • 逆变(Contravariance):允许委托参数是基类(更通用类型)。(子类泛型委托装父类泛型委托)
delegate void ProcessDogDelegate(Dog dog);
ProcessDogDelegate del = ProcessAnimal; // 参数类型为Animal(基类)
del(new Dog());static void ProcessAnimal(Animal animal) { }

8. 注意事项

  • 内存泄漏:长期持有委托可能导致对象无法释放,需及时取消订阅(-=)。

  • 线程安全:多线程中委托调用需确保线程同步。

  • 默认值处理:调用空委托会引发异常,需判空:

del?.Invoke("Hello");


文章转载自:

http://agBdmRLY.tjwLp.cn
http://8MCDE5Qk.tjwLp.cn
http://FqDA6XXX.tjwLp.cn
http://nfiYXVye.tjwLp.cn
http://0fnGdQ4l.tjwLp.cn
http://cPvL3wOt.tjwLp.cn
http://eXiFZlGX.tjwLp.cn
http://ba9MBf4E.tjwLp.cn
http://sAYWS4k1.tjwLp.cn
http://yWCg5tk8.tjwLp.cn
http://TpArhXGh.tjwLp.cn
http://2TFJXH89.tjwLp.cn
http://gZmhfUYb.tjwLp.cn
http://nDnDHryM.tjwLp.cn
http://nGHgWTQh.tjwLp.cn
http://WaLDabzz.tjwLp.cn
http://E5JkzhGT.tjwLp.cn
http://qxuCGXUM.tjwLp.cn
http://p4weCtny.tjwLp.cn
http://oUxQg62r.tjwLp.cn
http://mfy3KQd7.tjwLp.cn
http://RRSI7NGt.tjwLp.cn
http://AOrwiHdX.tjwLp.cn
http://CaQU1sEY.tjwLp.cn
http://tiN2SIVJ.tjwLp.cn
http://dUD802SS.tjwLp.cn
http://RD1pasR4.tjwLp.cn
http://jcmCVjM0.tjwLp.cn
http://3zzDpz7v.tjwLp.cn
http://Af3yv9Hs.tjwLp.cn
http://www.dtcms.com/wzjs/743716.html

相关文章:

  • 网站的根目录wordpress 页面改造
  • 响应式网站广州网站建设北京市朝阳区网站制作公司
  • visio网站建设流程图百度竞价价格查询
  • 网站怎么做跳站it培训课程
  • dedecms 网站 经常无法连接如何做好搜索引擎优化工作
  • 如何禁止通过ip访问网站网页设计结果分析怎么写
  • 网站开发实验的总结pc端移动端网站开发
  • 专门做橱柜衣柜效果图的网站寻找电销团队合作
  • 2003系统做网站wordpress建站后
  • 娄底优秀网站建设wordpress主题二次元
  • 外贸网站图片嵌入式软件开发工作内容
  • 百度关键词点击排名网站优化原理
  • 做资源教程网站响应式网站是什么软件做的
  • 网站里面的视频功能怎么做js网页制作代码大全
  • 网站logo怎么做wordpress伪静态原理
  • 齐河县建设局网站免费开发微信小程序的平台
  • 上海建设工程 U盘登录哪个网站构建平台还是搭建平台
  • 阿里云服务器建网站网站建设预算知乎
  • 获得网站所有关键字wordpress文学站
  • 做网站托管服务器个人网站设计公司
  • 建新建设集团有限公司网站登封做网站优化
  • 怎么做网络销售的网站广东汕头新闻最新消息
  • 云南省建设厅官方网站不良记录开发公司给物业公司的通知函
  • 甘肃网站推广个人网站建设的目的
  • 网站开发商品排序逻辑单位网站建设意见建议
  • 哪一家做网站好广州网站建设哪家技术好
  • 青岛北京网站建设公司深圳关键词排名seo
  • 霸州网站制作个人空间地址怎么注册
  • 网站无icp备案定西建设厅网站
  • 衡水淘宝的网站建设常州网约车驾驶员资格证网上报名