C# · 委托语句简化演变


1.委托基础语句形式

namespace QLVision
{
    delegate void dHelp();//定义委托

    static class Program
    {
        /// 
        /// 应用程序的主入口点。
        /// 
        [STAThread]
        static void Main()
        {
            dHelp h;//委托实例

            h = SaySometing;//实例赋值

            h();//委托调用

            void SaySometing()
            {
                MessageBox.Show("Hello");
            }

        }
    }
}

2.委托的作用

委托用于存放行为,行为由调用者决定。

namespace QLVision
{
    delegate void dHelp();//定义委托

    static class Program
    {
        /// 
        /// 应用程序的主入口点。
        /// 
        [STAThread]
        static void Main()
        {
            void Talk(dHelp help)//传参为委托
            {
                help();//方法内执行委托方法
            }

            void SayHello()
            {
                MessageBox.Show("Hello");
            }
            void SayBye()
            {
                MessageBox.Show("Bye");
            }

            Talk(SayHello);//方法调用
            Talk(SayBye);//方法调用

        }
    }
}

3.委托的分类

与方法名和方法体无关,只按返回类型,参数类型,参数个数分类。

 4.委托的简化

泛型委托:

Action :无返回值;链接:Action 委托 (System) | Microsoft Docs

Func :有返回值;链接:Func 委托 (System) | Microsoft Docs

namespace QLVision
{
    static class Program
    {
        /// 
        /// 应用程序的主入口点。
        /// 
        [STAThread]
        static void Main()
        {
            void Talk(Action help)//传参为委托
            {
                help();//执行委托方法
            }

            Talk(SayHello);//调用方法

            void SayHello()
            {
                MessageBox.Show("Hello");
            }
        }
    }
}

使用Lambda表达式:

namespace QLVision
{
    static class Program
    {
        /// 
        /// 应用程序的主入口点。
        /// 
        [STAThread]
        static void Main()
        {
            void Talk(Action help)//传参为委托
            {
                help();//执行委托方法
            }

            Talk(() => MessageBox.Show("Hello"));//Lamda表达式

        }
    }
}

参考链接:之所以你没有使用委托是因为你还不够了解它.._哔哩哔哩_bilibili

C