zoukankan      html  css  js  c++  java
  • C#委托

    using System;
    using static System.Console;
    
    //委托 降低耦合
    //如果一个函数的参数是一个函数
    //就可以定义一个委托
    
    namespace ConsoleApp
    {
        class Program
        {
            //委托
            //可以在类的内部、外部,名字空间 定义委托
            //相当于一个函数类型
            public delegate void WtiteAString(int i);
    
            public static void fun(int i)
            {
                WriteLine(i);
            }
    
            public static void fun1()
            { }
    
            static void Main(string[] args)
            {
                //复制会重新分配一个方法
                WtiteAString write = fun;
                write = new WtiteAString(fun);
    
                write(1);
                
    
                //Action<T>委托,返回类型为void
                Action<int> op1 = fun;
                op1(2);
    
                Action d = fun1;
    
                //Func<T>委托
                //单参,表示返回类型,多参前面表示方法的参数,最后一个表示返回类型
                Func<int, double> op2;
    
                //多播委托,使用+ += - -=
                //其调用的顺序并未正式定义,所以要避免写依赖顺序调用方法的代码
                op1 += fun;
    
                //如果委托调用的一个方法引发了异常,委托迭代就会停止,不再调用其他方法
                //为避免这种情况,应自己迭代方法列表
                Action d1 = fun1;
                d1 += fun1;
                Delegate[] delegates = d1.GetInvocationList();
                foreach (Action d2 in delegates)
                {
                    try
                    {
                        d2();
                    }
                    catch (Exception)
                    {
                        WriteLine("Exception caught");
                    }
                }
    
                //匿名方法 委托一个现写的函数
                //匿名方法不能使用跳转语句(break goto continue)跳到该匿名方法外部
                //不能访问外部ref、out参数,但可以使用其他的外部变量
                string mid = ", middle part,";
                Func<string, string> anonDel = delegate (string param)
                {
                    param += mid;
                    param += " and this was added to the string.";
                    return param;
                };
    
                WriteLine(anonDel("start of string"));
    
    
                //lambda表达式
                Func<string, string> oneParam = 
                    s2 => $"change uppercase {s2.ToUpper()}"; //s2为参数
                WriteLine(oneParam("test"));
    
                //多个参数
                Func<double, double, double> twoParams =
                    (x, y) => x * y;
                WriteLine(twoParams(2, 3));
            }
        }
    }
  • 相关阅读:
    团队冲刺阶段二(八)
    团队项目事后诸葛亮会议
    团队冲刺阶段二(七)
    团队冲刺阶段二(六)
    团队冲刺阶段二(五)
    团队冲刺阶段二(四)
    HTML5 CSS3
    浮动和渐变色,定位position,元素的层叠顺序
    css盒模型。边框和内外边距
    标签分类与元素转换
  • 原文地址:https://www.cnblogs.com/xslwm/p/9592059.html
Copyright © 2011-2022 走看看