你注册过的那些网站网站标签优化怎么做
2026/4/7 4:07:35 网站建设 项目流程
你注册过的那些网站,网站标签优化怎么做,北京网站设计 公司新鸿儒,工作室暴利项目一、什么是委托1.1 官方解释委托是一种定义方法签名的类型。当实例化委托时#xff0c;您可以将其实例与任何具有兼容签名的方法相关联#xff0c;并通过委托实例调用该方法。1.2 个人理解委托就是用于封装和执行方法#xff08;函数#xff09;的一个类。★事件是一种特殊…一、什么是委托1.1 官方解释委托是一种定义方法签名的类型。当实例化委托时您可以将其实例与任何具有兼容签名的方法相关联并通过委托实例调用该方法。1.2 个人理解委托就是用于封装和执行方法函数的一个类。★事件是一种特殊的委托。二、如何声明委托C# 中有四种常见的委托声明方式2.1delegate自定义委托public delegate int TestDelegate(int x, int y);可以无返回值也可以指定返回值类型。支持0 到 32 个参数。2.2Action无返回值泛型委托无返回值即返回void。支持0 到 16 个参数。示例Action无参无返回值。Actionint, string接收int和string参数无返回值。Actionint, string, bool三个参数无返回值。Actionint, int, int, int四个int参数无返回值。2.3Func有返回值泛型委托必须有返回值不能为void。支持0 到 16 个输入参数最后一个泛型参数为返回类型。示例Funcint无参返回int。Funcobject, string, int接收object和string返回int。FuncT1, T2, T3, int三个泛型输入参数返回int。2.4Predicate布尔返回值泛型委托仅接受一个参数。**返回值固定为bool**。示例Predicateint接收int返回bool。定义形式public delegate bool PredicateT(T obj);2.5 四者之间的区别总结委托类型参数数量范围返回值要求delegate0 ~ 32可无返回值也可指定类型Action0 ~ 16无返回值voidFunc0 ~ 161 返回值必须有返回值Predicate仅 1 个返回值固定为bool★注部分资料中提到 Action/Func 最多支持 4 个参数这是早期 .NET 版本限制现代 C#.NET Framework 4.0 / .NET Core已支持最多16 个参数。三、委托的使用示例3.1delegate的使用public delegate int MethodDelegate(int x, int y); private static MethodDelegate method; static void Main(string[] args) { method new MethodDelegate(Add); Console.WriteLine(method(10, 20)); // 输出30 Console.ReadKey(); } private static int Add(int x, int y) x y;3.2Action的使用static void Main(string[] args) { Teststring(Action, Hello World!); Testint(Action, 1000); Teststring(p Console.WriteLine({0}, p), Lambda Hello); Console.ReadKey(); } public static void TestT(ActionT action, T p) action(p); private static void Action(string s) Console.WriteLine(s); private static void Action(int s) Console.WriteLine(s);★Action常用于执行操作无需返回结果。3.3Func的使用static void Main(string[] args) { Console.WriteLine(Testint, int(Fun, 100, 200)); // 输出300 Console.ReadKey(); } public static int TestT1, T2(FuncT1, T2, int func, T1 a, T2 b) func(a, b); private static int Fun(int a, int b) a b;★Func常用于需要返回计算结果的场景。3.4Predicate的使用static void Main(string[] args) { Point[] points { new Point(100, 200), new Point(150, 250), new Point(250, 375), new Point(275, 395), new Point(295, 450) }; Point first Array.Find(points, ProductGT10); Console.WriteLine(Found: X {0}, Y {1}, first.X, first.Y); Console.ReadKey(); } private static bool ProductGT10(Point p) p.X * p.Y 100000;★Predicate常用于集合筛选如Array.Find,List.FindAll等。四、委托的清空4.1 方法一循环移除public MethodDelegate OnDelegate; public void ClearDelegate() { while (OnDelegate ! null) { OnDelegate - OnDelegate; } }★⚠️ 注意此写法在多线程环境下可能不安全且逻辑上存在争议每次减去自身可能导致未完全清除。更推荐方法二。4.2 方法二使用GetInvocationListpublic MethodDelegate OnDelegate; static void Main(string[] args) { Program test new Program(); if (test.OnDelegate ! null) { Delegate[] dels test.OnDelegate.GetInvocationList(); foreach (var del in dels) { test.OnDelegate - (MethodDelegate)del; } } }★此方法安全可靠适用于多播委托的彻底清空。五、委托的特点类似于 C 的函数指针但类型安全。允许将方法作为参数传递。可用于实现回调机制。支持多播多个方法绑定到同一个委托依次调用。方法签名不必完全一致协变/逆变支持。六、总结类型参数数量返回值典型用途delegate0–32任意或无自定义委托Action0–16无void执行操作Func0–16必须有计算并返回结果Predicate1bool条件判断、筛选参考资料http://www.fengfly.com/plus/view-209140-1.htmlhttp://www.cnblogs.com/foolishfox/archive/2010/09/16/1827964.htmlhttps://www.cnblogs.com/akwwl/p/3232679.htmlhttps://www.cnblogs.com/xiao-qian/p/12688043.html- EOF -技术群添加小编微信dotnet999公众号dotnet讲堂

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询