美文网首页
委托、拉姆达、匿名类、扩展方法

委托、拉姆达、匿名类、扩展方法

作者: 杰克_王_ | 来源:发表于2020-02-03 17:55 被阅读0次
        // 委托的本质是一个类
        public delegate void NoReturnNoParam();
        public delegate void NoReturnWithParam(string name, int age);

        static void Show()
        {
            Console.WriteLine("调用Show方法");
        }

        static void Show(string name, int age)
        {
            Console.WriteLine($"{nameof(name)}: {name}; {nameof(age)}: {age}");
        }
public static void Run()
        {
            // 1.0
            {
                NoReturnNoParam noReturnNoParam = new NoReturnNoParam(LambdaDemo.Show);
                noReturnNoParam.Invoke();
            }
            // 2.0
            {
                string hobby = "pingpong";
                NoReturnWithParam noReturnWithParam = new NoReturnWithParam(delegate (string name, int age)
                {
                    Console.WriteLine($"{nameof(name)}: {name}; {nameof(age)}: {age}; {nameof(hobby)}: {hobby}");
                });
                noReturnWithParam.Invoke("jieke", 18);
            }
            // 3.0
            {
                // => goes to
                string hobby = "pingpong";
                NoReturnWithParam noReturnWithParam = new NoReturnWithParam((string name, int age) =>
                {
                    Console.WriteLine($"{nameof(name)}: {name}; {nameof(age)}: {age}; {nameof(hobby)}: {hobby}");
                });
                noReturnWithParam.Invoke("jieke", 18);
            }
            // lambda的本质为内嵌密封私有类中的公开方法
            {
                string hobby = "pingpong";
                NoReturnWithParam noReturnWithParam = (string name, int age) =>
                {
                    Console.WriteLine($"{nameof(name)}: {name}; {nameof(age)}: {age}; {nameof(hobby)}: {hobby}");
                };
                noReturnWithParam.Invoke("jieke", 18);
            }
            {
                string hobby = "pingpong";
                NoReturnWithParam noReturnWithParam = (name, age) => Console.WriteLine($"{nameof(name)}: {name}; {nameof(age)}: {age}; {nameof(hobby)}: {hobby}");
                noReturnWithParam.Invoke("jieke", 18);
            }
            {
                string hobby = "pingpong";
                Action action = () => Console.WriteLine(hobby);
                action();

                Func<int, int, int> func = (x, y) => x + y;
                Console.WriteLine(func.Invoke(1, 1));
            }
            {
                Func<int, bool> func = i => i > 0;
            }
            {
                Expression<Func<int, bool>> expression = i => i > 0;
                Func<int, bool> func = expression.Compile();
            }

            // 匿名类,里面的属性都是只读的
            {
                // 无法使用一般方法访问属性
                object obj = new
                {
                    Name = "jieke",
                    Age = 10
                };
            }
            {
                // 属性是只读的
                var obj = new
                {
                    Name = "jieke",
                    Age = 10
                };
                Console.WriteLine($"{nameof(obj.Name)}: {obj.Name}; {nameof(obj.Age)}: {obj.Age}");
            }
            {
                // 没有编译检查,容易出错
                dynamic obj = new
                {
                    Name = "jieke",
                    Age = 10
                };
                Console.WriteLine($"{nameof(obj.Name)}: {obj.Name}; {nameof(obj.Age)}: {obj.Age}");
            }
        }
using System;
using System.Globalization;

    // 扩展方法可用于组建式开发,在不修改原有类的情况下,添加功能;
    // 直接或间接继承至被扩展类的子类会自动继承扩展的功能
    // 当原来类型中有与扩展方法声明一致的方法时,扩展方法会被屏蔽
    public static class ExtentionMethodSample
    {
        static IFormatProvider defaultProvider = new CultureInfo("en-GB");
        public static T ConvertTo<T>(this object value, IFormatProvider formatProvider = null)
        {
            try
            {
                if (value != null)
                    return (T)Convert.ChangeType(value, typeof(T), formatProvider ?? defaultProvider);
            }
            catch { }
            return default(T);
        }

        public static void InvokeSample()
        {
            string s = "10000";
            int i = s.ConvertTo<int>();
            Console.WriteLine(i);
        }
    }

相关文章

  • 委托、拉姆达、匿名类、扩展方法

  • 拉姆达表达式遍历集合元素

    拉姆达表达式在匿名内部类有使用,这次要说的是在集合中遍历元素 在哈希图里使用拉姆达表达式: 在集合里使用拉姆达表达式:

  • Java基础

    匿名内部类 一般对应一个接口或者一个抽象类参考文章 继续简化,如果这个接口或者抽象类只有一个实现方法,用拉姆达表达...

  • C#笔记(2)-高级特性

    [TOC] 一 委托 二 事件标准事件模式 三 匿名方法 四 扩展方法 五 匿名类型 六 元组 七 动态绑定自定义...

  • android Button的三种点击方法实现

    代理委托方法 在视图类implement Button的点击委托并实现委托 匿名函数 利用布局文件onClick属...

  • 常用工具类

    CommonUtils 工具类 常用工具类 添加依赖 kotlin扩展/委托 sharePreferences委托...

  • 类别和类扩展的区别

    类扩展 (Class Extension也有人称为匿名分类) 作用: . 能为某个类附加额外的属性,成员变量,方法...

  • 分类和类扩展

    类扩展 (ClassExtension也有人称为匿名分类) 作用 使用方法 分类(Categories) 作用 使...

  • iOS - 类扩展与分类的区别

    类扩展 (Class Extension也有人称为匿名分类)## 作用:能为某个类附加额外的属性,成员变量,方法声...

  • iOS - 类扩展与分类的区别

    类扩展 (Class Extension也有人称为匿名分类) 作用: 能为某个类附加额外的属性,成员变量,方法声明...

网友评论

      本文标题:委托、拉姆达、匿名类、扩展方法

      本文链接:https://www.haomeiwen.com/subject/nrohxhtx.html