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

            委托是一种数据类型,像类一样(可以声明委托类型变量),委托是安全封装方法的类型,类似于 C 和 C++ 中的函数指针。与 C 函数指针不同的是,委托是面向对象的、类型安全的和可靠的它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

            委托可以看做是函数的指针。整数可以用整数变量指向它,对象可以用对象变量指向它,函数也可以用委托变量指向它。和直接调用函数的区别:用委托就可以指向任意的函数,哪怕是之前没定义的都可以,而不使用受限于那几种。

    1.委托是一种数据类型,像类一样的一种数据类型。一般都是直接在命名空间中定义。

    2.定义委托时,需要指明返回值类型、委托名与参数列表.这样就能确定该类型的委托能存储什么样的方法。

    3.使用委托:

        3.1声明委托变量。

        3.2委托是一个引用类型,就像类一样,所以当声明委托变量后,如果不赋值则该委托变量为null。所以在使用委托变量前最好做非空校验weituo!=null

        3.3委托类型的变量只能赋值一个委托类型的对象。

    委托的使用:

    第一种写法:
    namespace 委托
    {
        //声明一个委托指向一个函数
        public delegate void DelSayHi(string name);
        class Program
        {
            static void Main(string[] args)
            {
                //DelSayHi del = new DelSayHi(SayHiEnglish);
                //将制定的函数传入到委托中
                DelSayHi del = new DelSayHi(SayHiChinese);
               //或者可以这样写:DelSayHi del = SayHiEnglish;可直接把函数赋值给委托,实际上还是调用了new方法。
                del("张三");
                Console.ReadKey();
            }
            public static void SayHiChinese(string name)
            {
                Console.WriteLine("吃了吗?" + name);
            }
            public static void SayHiEnglish(string name)
            {
                Console.WriteLine("Nice to meet you" + name);
            }
        }
    }
    
    第二种写法:
    namespace 委托
    {
        //声明一个委托指向一个函数
        public delegate void DelSayHi(string name);
        class Program
        {
            static void Main(string[] args)
            {
                Test("张三", SayHiEnglish);
                Console.ReadKey();
            }
            public static void Test(string name, DelSayHi del)
            {
                del(name);
            }
            public static void SayHiChinese(string name)
            {
                Console.WriteLine("吃了吗?" + name);
            }
            public static void SayHiEnglish(string name)
            {
                Console.WriteLine("Nice to meet you" + name);
            }
        }
    }
    第三种写法:委托加匿名函数
    匿名方法:不能在类中定义,而是在给委托变量赋值的时候,需要赋值一个方法,此时可以“现做现卖”,定义一个匿名方法传递给该委托。
    namespace 匿名函数
    {
        //第一步:先声明一个委托
        public delegate void DelSayHi(string name);
        class Program
        {
            static void Main(string[] args)
            {
                //第二步:把匿名函数赋值给委托
                DelSayHi del = delegate(string name)
                {
                    Console.WriteLine("nice to meet you" + name);
                };
                del("张三");
                Console.ReadKey();
            }
        }
    }
    第四种方法:委托加lamda表达式:比匿名函数更方便(不需要传数据类型,因为委托已经限定了数据类型)
    namespace _lamda表达式
    {
        public delegate void DelSayHi(string name);
        class Program
        {
            static void Main(string[] args)
            {
                DelSayHi del = (string name) => { Console.WriteLine("你好" + name); };//等价于DelSayHi del = name => { Console.WriteLine("你好" + name); }
                del("张三");
                Console.ReadKey();
            }
        }
    }
  • 相关阅读:
    ELK-安装logstash
    ELK-安装kibana
    ELK-Elasticsearch安装
    springboot+springcloud集成jar
    nginx普通配置/负载均衡配置/ssl/https配置
    apidoc @apiGroup兼容中文
    Jenkins定时构建时间设置
    nginx配置ssl证书实现https访问
    骚胖选股法
    Dockerfile 时区设置
  • 原文地址:https://www.cnblogs.com/qicao/p/9126138.html
Copyright © 2011-2022 走看看