查看: 541|回复: 0
打印 上一主题 下一主题

[其他] C#_关于委托的学习

[复制链接]
may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52352
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2016-4-25 00:06:59 |只看该作者 |倒序浏览
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;

  6. namespace CSharp_委托的学习
  7. {
  8.     class Program
  9.     {
  10.         ////1、什么是委托及最简单的委托定义与实例化
  11.         ////如果我们需要把方法当做参数来传递的话,我们就需要用到委托。委托是一个类型,可以指向一个方法。委托需要定义和实例化。
  12.         ////最简单的委托:
  13.         //private delegate void Print();//定义了一个无返回类型、名称为Print的委托。

  14.         //static void Main(string[] args)
  15.         //{
  16.         //    Print print1 = printStr;//用Print类型的委托实例化了一个委托print1,并指向函数printStr。
  17.         //    print1();//调用委托即相当于调用函数printStr();
  18.         //}

  19.         //static void printStr()
  20.         //{
  21.         //    Console.WriteLine("hello world");
  22.         //}


  23.         ////2、委托可以作为参数传递
  24.         //private delegate void Print();//定义了一个无返回类型、名称为Print的委托。

  25.         //static void Main(string[] args)
  26.         //{
  27.         //    Print print1 = printStr;//用Print类型的委托实例化了一个委托print1,并指向函数printStr。
  28.         //    printDelegateMethod(print1);//print1作为参数传递,最终调用函数printStr()
  29.         //}

  30.         //static void printStr()
  31.         //{
  32.         //    Console.WriteLine("hello world");
  33.         //}
  34.         //static void printDelegateMethod(Print printTemp)
  35.         //{
  36.         //    printTemp();
  37.         //}

  38.         ////3、内置委托:Action类型委托
  39.         ////Action类型委托的特点:无返回类型的委托即返回类型为void
  40.         ////定义格式:T表示方法的参数,最多不超过16个
  41.         ////Action
  42.         ////Action<in T>
  43.         ////Action<in T1, in T2>
  44.         ////Action<in T1, in T2....in T16>
  45.         //static void Main(string[] args)
  46.         //{
  47.         //    Action a1 = printStr;//用Action类型委托实例化一个委托a1,并指向printStr
  48.         //    a1();//调用a1即相当于调用函数printStr

  49.         //    Action<string> a2 = printOneStr;//用Action类型委托实例化一个含有一个string类型参数的委托a2,并指向printOneStr
  50.         //    a2("hello, I Invoke printOneStr");//调用a2即相当于调用函数printOneStr

  51.         //    Action<string, int> a3 = printTwoStr;
  52.         //    a3("剩余血量:", 50);
  53.         //}

  54.         //static void printStr()
  55.         //{
  56.         //    Console.WriteLine("hello world");
  57.         //}
  58.         //static void printOneStr(string s1)
  59.         //{
  60.         //    Console.WriteLine(s1);
  61.         //}
  62.         //static void printTwoStr(string s1, int i2)
  63.         //{
  64.         //    Console.WriteLine(s1+i2);
  65.         //}

  66.         ////3、内置委托:Func类型委托
  67.         ////Func类型委托的特点:带有一个返回值的委托
  68.         ////定义格式:T表示方法的参数, TReturn表示返回值类型,T最多不超过16个
  69.         ////Func
  70.         ////Func<out TReturn>
  71.         ////Func<in T1, in T2>
  72.         ////Func<in T1, in T2....in T16, out TReturn>
  73.         //static void Main(string[] args)
  74.         //{
  75.         //    Func<int> a1 = Test1;//用Func类型委托实例化一个委托a1,并指向Test1
  76.         //    Console.WriteLine(a1());//调用a1即相当于调用函数Test1

  77.         //    Func<float, string> a2 = Test2;//用Func类型委托实例化一个含有一个float类型参数,返回类型为string的委托a2,并指向Test2
  78.         //    Console.WriteLine(a2(3.14f));//调用a2即相当于调用函数Test2

  79.         //    Func<string, int, string> a3 = Test3;
  80.         //    Console.WriteLine(a3("剩余血量:", 50));
  81.         //}

  82.         //static int Test1()
  83.         //{
  84.         //    return 1;
  85.         //}
  86.         //static string Test2(float f1)
  87.         //{
  88.         //    return f1.ToString();
  89.         //}
  90.         //static string Test3(string s1, int i2)
  91.         //{
  92.         //    return (s1 + i2);
  93.         //}

  94.         //多播委托:委托里包含多个方法(函数),调用多播委托可以同时调用这些方法
  95.         private delegate void Print();//定义了一个无返回类型、名称为Print的委托。

  96.         static void Main(string[] args)
  97.         {
  98.             Print print = print1;//用Print类型的委托实例化了一个委托print,并指向函数print1。
  99.             print();//调用委托print即相当于调用函数print1();

  100.             print += print2;//并没有直接指向print2,而是加上print2
  101.             print();//调用委托print即相当于调用函数print1()和print2();
  102.         }

  103.         static void print1()
  104.         {
  105.             Console.WriteLine("hello ");
  106.         }
  107.         static void print2()
  108.         {
  109.             Console.WriteLine("world");
  110.         }

  111.     }
  112. }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-8-18 02:19 , Processed in 0.085236 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部