栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

C#四种初始化委托,以及 Action 与委托关系,(夯实基础)

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#四种初始化委托,以及 Action 与委托关系,(夯实基础)

关于委托的声明,实例化,官方有如下几种方式:

new ,简单声明,匿名(){},lambda四种方式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskDemo
{
    class DelegateDemo
    {
        //委托,声明,实例化,以及使用委托
        public delegate void Del(string str);
        public delegate string Del2(string str);
        //第一种方法:非常传统方式,定义一个该委托类型的方法,
        public void Notify(string name) {
            Console.WriteLine(name);
        }
        public void Notify_()
        {
            Console.WriteLine("无参");
        }
        //第一种方法:C# 2.0语法中,new一个实例
        public void TestDemo1()
        {
            Del delinstance =new Del(Notify);
            //Del delinstance2 = Notify_;
        }

        //第二种方法:C# 2.0语法中,简单声明
        public void TestDemo2()
        {
            Del delinstance = Notify;
            //Del delinstance2 = Notify_;
        }
        //第三种方法:C# 2.0语法中,及更高版本中,还有匿名方式
        public void TestDemo3()
        {
            //接受一个类似的委托,匿名方式定义一个委托
            Del delinstance = delegate(string name) {
                Console.WriteLine(name);
            };
            Del2 delinstance2 = delegate (string name) {
                Console.WriteLine(name);
                return "我是匿名方式定义委托!";
            };
            //Del delinstance2 = Notify_;
        }

        //第四种方法:C# 3.0语法中,及更高版本中,还有可以使用lambda,声明实例化委托
        public void TestDemo4()
        {
            //接受一个类似的委托,匿名方式定义一个委托
            Del delinstance = name => {
                Console.WriteLine(name);
            };
            Del2 delinstance2 = name => {
                Console.WriteLine(name);
                return "要求有返回值";
            };
            var res=delinstance2("我是lambda方式,声明实例化,带返回值的");
            Console.WriteLine(res);
            //Del delinstance2 = Notify_;
        }
    }
}

https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/delegates/how-to-declare-instantiate-and-use-a-delegate

出处如连接。

第二:什么是Ac'ti'o'n?

继承自delegate,本质就是一个特殊的委托,即一个参数名,无返回值特殊签名的委托,

https://docs.microsoft.com/zh-cn/dotnet/api/system.action-1?view=netcore-3.1

对应的action类型声明之后的赋值,有三种

常规,匿名,lambda

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskDemo
{
    class ActionDemo
    {
        //https://docs.microsoft.com/zh-cn/dotnet/api/system.action-1?view=netcore-3.1
        //封装一个方法,该方法只有一个参数且不返回值。
        public delegate void Action(T obj);
        //简单理解是某种特定类型的委托,即一个参数,无返回值的委托,不用单独声明如上,可直接使用:
        //public delegate void Action(T obj);

        public void TestDelegate() {
            //输出数组内容,以前的方式,当作复习委托
            List names = new List();
            names.Add("张三");
            names.Add("李四");
            //参数明显是需要一个Action类型,即特定委托
            names.ForEach(delegate (string name)
            {
                Console.WriteLine(name);
            });
            //必须是一个带一个参数,无返回值的函数签名,
            //因为里面就是接收一个Action委托
            names.ForEach(Notify);
        }
        public void Notify(string name) {
            Console.WriteLine("测试");
        }

        //!!!!!!!!!!这里重点是用Action非常简洁,用来声明特定类型的委托
        public void TestAction() {
            //第二种方式
            Action actionDel = DemoAction;
            //第三种方式:
            Action actionDel2 = delegate (string name) { };
            Action actionDel3 = name => {

            };
        }
        public void DemoAction(string name) { 

        }
    }
}

 最后,最后,万丈高楼平地起,夯实基础,继续总结学习,进阶提高各种知识,技巧,

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/910430.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号