C#在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
正则表达式 发布于:2024-05-23 08:59 Lua调用CSharp 发布于:2024-05-22 15:49 LuaFunction接收 发布于:2024-05-21 12:47 访问Lua的function 发布于:2024-05-21 12:41 映射到LuaTable,不推荐使用 发布于:2024-05-20 17:40 通过Dictionary和List访问Lua变量 发布于:2024-05-20 17:32 判断哪种方式计算圆周率最快精度最高 发布于:2024-05-17 08:29 Unity使用Enum的几个小技巧 发布于:2024-05-16 17:15 映射到interface 发布于:2024-05-16 16:05 映射到CSharp的类 发布于:2024-05-16 15:41 CSharp Call Lua 发布于:2024-05-16 15:30 xLua课程2 发布于:2024-05-09 12:41 c# learning code 发布于:2024-05-09 09:26 C# timer测试 发布于:2024-05-06 20:07 QFrameWork学习 发布于:2024-04-22 10:11 Shader 讲解 发布于:2024-04-16 13:09 csharp文本AES解密 发布于:2024-03-23 08:52 初始化单链表 单链表的取值方法 单链表的查找方法 单链表的插入方法 单链表的删除方法 使用主函数调用以测试以上函数 发布于:2024-03-20 19:07 曲线lerp 发布于:2024-03-16 14:31 用于创建跟随相机 发布于:2024-03-16 14:22 次表面散射代码 发布于:2024-03-09 17:32 Unity 根据Excel生成C#脚本 发布于:2024-02-17 16:45 Test the "Value and Reference" program 发布于:2024-02-12 11:12 测试枚举类型 发布于:2024-02-08 17:29 获取用户名 发布于:2024-02-06 10:24 # 自定义委托 委托也是一种类,所以声明时与其它类是平级的。 ``` public delegate double Calc(double x, double y); public class HelloWorld { public static void Main() { } } ``` delegate 告诉编译器正在声明委托,double 表示目标方法的返回值类型,圆括号里是目标方法的参数列表。 委托于所封装的方法必须类型兼容。 发布于:2024-02-05 20:59 # Action委托和Func委托 Action委托只能委托没有返回值的方法。 Func委托则没有限制。 Func<参数类型,参数类型,...,返回值类型> func = new Func<参数类型,参数类型,...,返回值类型>(需要委托的函数); 委托的函数的参数类型和返回值类型,需要和Func<>中声明的相同。 发布于:2024-02-05 20:45 判断time赋值(百度c#吧某问题代码) 发布于:2024-01-30 15:38 测试js 生成hmac算法 发布于:2024-01-26 17:28 系统化untiy学习 发布于:2024-02-28 11:28 hmac 代码执行 发布于:2024-01-26 18:34 顺序查找法 发布于:2024-01-19 19:31 unity项目笔记 发布于:2024-01-22 13:27 简单的Func数据封装 发布于:2024-01-14 13:41 抽奖注册器 发布于:2023-12-28 16:48 测试功能xin 发布于:2023-12-25 20:41 C#初学-学习代码语法 发布于:2023-12-14 17:46 unity 面试 发布于:2024-01-23 17:14 基数排序的设计 发布于:2023-12-12 22:43 散列表避免重复投票 发布于:2023-12-12 00:01 基数排序算法 发布于:2023-12-11 23:40 判断闰年月份 发布于:2023-12-08 17:29 #include <iostream> #include <chrono> #include <thread> int main() { std::cout << "延迟输出前的消息" << std::endl; // 设置延迟时间为3秒 std::chrono::seconds delay(3); // 让线程睡眠3秒 std::this_thread::sleep_for(delay); std::cout << "延迟输出后的消息" << std::endl; return 0; } 发布于:2023-12-07 10:45 计数排序算法 发布于:2023-12-04 00:08 堆排序算法 发布于:2023-11-28 00:14 快速排序算法 发布于:2023-11-13 22:21 归并排序逆序对 发布于:2023-11-06 15:39 归并排序算法 发布于:2023-11-06 14:07 计算日期间隔 发布于:2023-11-01 16:07 二维数组旋转 发布于:2023-10-30 11:30 [更多]
显示目录

委托(Delegate)



学习嵌入式的绝佳套件,esp8266开源小电视成品,比自己去买开发板+屏幕还要便宜,省去了焊接不当搞坏的风险。 蜂鸣版+触控升级仅36元,更强的硬件、价格全网最低。

点击购买 固件广场

C# 委托(Delegate)

C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。

委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。

声明委托(Delegate)

委托声明决定了可由该委托引用的方法。委托可指向一个与其具有相同标签的方法。

例如,假设有一个委托:

public delegate int MyDelegate (string s);

上面的委托可被用于引用任何一个带有一个单一的 string 参数的方法,并返回一个 int 类型变量。

声明委托的语法如下:

delegate <return type> <delegate-name> <parameter list>

实例化委托(Delegate)

一旦声明了委托类型,委托对象必须使用 new 关键字来创建,且与一个特定的方法有关。当创建委托时,传递到 new 语句的参数就像方法调用一样书写,但是不带有参数。例如:

public delegate void printString(string s);
...
printString ps1 = new printString(WriteToScreen);
printString ps2 = new printString(WriteToFile);

下面的实例演示了委托的声明、实例化和使用,该委托可用于引用带有一个整型参数的方法,并返回一个整型值。

using System;

delegate int NumberChanger(int n);
namespace DelegateAppl
{
   class TestDelegate
   {
      static int num = 10;
      public static int AddNum(int p) {
         num += p;
         return num;
      }

      public static int MultNum(int q) {
         num *= q;
         return num;
      }
      public static int getNum() {
         return num;
      }

      static void Main(string[] args) {
         // 创建委托实例
         NumberChanger nc1 = new NumberChanger(AddNum);
         NumberChanger nc2 = new NumberChanger(MultNum);
         // 使用委托对象调用方法
         nc1(25);
         Console.WriteLine("Value of Num: {0}", getNum());
         nc2(5);
         Console.WriteLine("Value of Num: {0}", getNum());
         Console.ReadKey();
      }
   }
}

当上面的代码被编译和执行时,它会产生下列结果:

Value of Num: 35
Value of Num: 175

委托的多播(Multicasting of a Delegate)

委托对象可使用 "+" 运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。"-" 运算符可用于从合并的委托中移除组件委托。

使用委托的这个有用的特点,您可以创建一个委托被调用时要调用的方法的调用列表。这被称为委托的 多播(multicasting),也叫组播。下面的程序演示了委托的多播:

using System;

delegate int NumberChanger(int n);
namespace DelegateAppl
{
   class TestDelegate
   {
      static int num = 10;
      public static int AddNum(int p) {
         num += p;
         return num;
      }

      public static int MultNum(int q) {
         num *= q;
         return num;
      }
      public static int getNum() {
         return num;
      }

      static void Main(string[] args) {
         // 创建委托实例
         NumberChanger nc;
         NumberChanger nc1 = new NumberChanger(AddNum);
         NumberChanger nc2 = new NumberChanger(MultNum);
         nc = nc1;
         nc += nc2;
         // 调用多播
         nc(5);
         Console.WriteLine("Value of Num: {0}", getNum());
         Console.ReadKey();
      }
   }
}

当上面的代码被编译和执行时,它会产生下列结果:

Value of Num: 75

委托(Delegate)的用途

下面的实例演示了委托的用法。委托 printString 可用于引用带有一个字符串作为输入的方法,并不返回任何东西。

我们使用这个委托来调用两个方法,第一个把字符串打印到控制台,第二个把字符串打印到文件:

using System;
using System.IO;

namespace DelegateAppl
{
   class PrintString
   {
      static FileStream fs;
      static StreamWriter sw;
      // 委托声明
      public delegate void printString(string s);

      // 该方法打印到控制台
      public static void WriteToScreen(string str) {
         Console.WriteLine("The String is: {0}", str);
      }
      // 该方法打印到文件
      public static void WriteToFile(string s) {
         fs = new FileStream("c:\\message.txt",
         FileMode.Append, FileAccess.Write);
         sw = new StreamWriter(fs);
         sw.WriteLine(s);
         sw.Flush();
         sw.Close();
         fs.Close();
      }
      // 该方法把委托作为参数,并使用它调用方法
      public static void sendString(printString ps) {
         ps("Hello World");
      }
      static void Main(string[] args) {
         printString ps1 = new printString(WriteToScreen);
         printString ps2 = new printString(WriteToFile);
         sendString(ps1);
         sendString(ps2);
         Console.ReadKey();
      }
   }
}

当上面的代码被编译和执行时,它会产生下列结果:

The String is: Hello World
由JSRUN为你提供的C#在线运行、在线编译工具
        JSRUN提供的C# 在线运行,C# 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout