• 委托重载和使用


    重新整理一下,趁着现在项目有时间,还有那些语法糖,哎,最二了!

    MSDN的解释:https://msdn.microsoft.com/zh-cn/library/vstudio/ms173171(v=vs.110).aspx

        委托是一种定义方法签名的类型。 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。 您可以通过委托实例调用方法。

        委托用于将方法作为参数传递给其他方法。 事件处理程序就是通过委托调用的方法。 您可以创建一个自定义方法,当发生特定事件时某个类(例如 Windows 控件)就可以调用您的方法。 

    与委托的签名(由返回类型和参数组成)匹配的任何可访问类或结构中的任何方法都可以分配给该委托。 方法可以是静态方法,也可以是实例方法。 这样就可以通过编程方式来更改方法调用,还可以向现有类中插入新代码。 只要知道委托的签名,就可以分配您自己的方法。

    委托具有以下特点:

    • 委托类似于 C++ 函数指针,但它们是类型安全的。

    • 委托允许将方法作为参数进行传递。

    • 委托可用于定义回调方法。

    • 委托可以链接在一起;例如,可以对一个事件调用多个方法。

    • 方法不必与委托签名完全匹配。 

    • C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。

    •  C# 3.0 引入了 Lambda 表达式,利用它们可以更简练地编写内联代码块。 匿名方法和 Lambda 表达式(在某些上下文中)都可编译为委托类型。 这些功能统称为匿名函数。 有关 lambda 表达式的更多信息,请参见 匿名函数(C# 编程指南)



    namespace
    GXProjectTest.Lambda { /* 委托 */ public class TestDelegate { public void Demo1(Test<int> test) { if (test != null) test(1); } public string Demo2(Test<int, string, string> test) { if (test != null) { return test(1, "sss"); } return string.Empty; } public string Demo3(TestStr<int, string, string> tt) { if (tt != null) return tt(1, ""); return string.Empty; } public void Demo4(Test t) { if (t != null) t(); } } public delegate void Test(); public delegate void Test<in T>(int a); public delegate string Test<in T1, in T2, out TResult>(int a, string b); public delegate string TestStr(); public delegate string TestStr<in T>(int a); public delegate string TestStr<in T1, in T2, out TResult>(int a, string b); }

    测试代码

        public partial class TestDelegateWeb : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                //测试
    
                TestDelegate testDelegate = new TestDelegate();
    
                testDelegate.Demo1(Test);//有参数的
                testDelegate.Demo2(Test1);
                testDelegate.Demo3(Test1);
                testDelegate.Demo4(Test);//没有参数的
    
            }
    
            public void Test()
            {
    
            }
            public void Test(int a)
            {
                //随便写
            }
    
            public string Test1(int a, string b)
            {
                return string.Empty;
            }
        }
  • 相关阅读:
    div 内容自动换行
    发邮件
    asp gridview
    授权 注册
    asp grid 增加和删除行数据
    计算两个日期相差的天数
    sql 删除数据库表 外键
    装完Centos7提示Initial setup of CentOS Linux 7 (core)(转载)
    如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序
    centos7 安装拼音输入法(转载)
  • 原文地址:https://www.cnblogs.com/wucaifang/p/4589131.html
Copyright © 2020-2023  润新知