zoukankan      html  css  js  c++  java
  • 【C#】 语法糖

    【C#】 语法糖

     一, 扩展方法

      1. 对某个类功能上的扩展

      2. 特点: 使用方便,可以在不修改原代码的基础上进行扩展。 参照 linq,linq 就是一系列的扩展方法

      3. 语法: 非泛型静态类,静态方法, 第一个参数加 this,表示是对该类型的扩展

      4. 代码

      

       public static class Extension
        {
            private static int _defaultInt = 0;
            public static int ToInt(this string str)
            {
                if (int.TryParse(str,out _defaultInt))
                {
                    return _defaultInt;
                }
                return 0;
            }
        }

    二, 运算符重载
      1. 语法: 静态方法, 方法名 operator 加 运算符,参数类型 当前类

      2. 不是很常用

      3. 代码

      

        public class Operator
        {
            public int Num { get; set; }
    
            public static int operator +(Operator o1, Operator o2)
            {
                return o1.Num + o2.Num;
            }
        }

    三,Lambda
      1. Lambda 可以看成是对委托的简化

      2. 语法 ()=>{...}

      3. Lambda 开始学习时会非常不习惯,但用惯了会非常上瘾的。代码变得更简洁。另 委托 推荐使用系统定义的 Action 和 Func,不需要自己去定义委托类型

      4. 注意 延迟加载

      5. 代码

      

      Func<int, int, int> addFunc = (x, y) => x + y;
      int i = addFunc(5, 6);

    四, Linq
      1. 本质 扩展方法

      2. 使用上 推荐 方法语法 而不是 类sql 语法。方法语法可读性高,而且更符合 c# 的语法。

      3. 注意 延迟加载

      4. 语法 Linq + Lambda + var , 简洁而优美

      5. 代码

      

      List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7 };
      var v = list.Where(n => n < 3);

    五, 匿名类型
      1. 匿名类型 var 

      2. 使用场景 需要修改实体类属性,但又不想修改原实体类,也不想添加新的实体类,这可以用匿名类型

      3. 特点 灵活

      4. 代码

      

      Operator op = new Operator { Num = 3 };
      var v = new { OP = op, Name = "我是var" };            
      Console.WriteLine(v.OP.Num + v.Name);

     六, 方法参数默认值

      1. 简化重载, 将多个重载方法合并,减少代码量

      2. 代码

      

      private static void Main(string[] args)  
      {
        ShowName();
        ShowName(
    "不是默认");
        Console.ReadLine();
      }
      private static void ShowName(string name = "默认名称")
      {  
        Console.WriteLine(name);  
      }

    七, 运算符
      1. 三元 :

        a. 替换简单的 if else

        b. 语法 Console.WriteLine(i > 0 ? "大于0" : "小于0");

      2. 默认值 :

        a. 参数默认值,用在数据库非空非常好用

        b. 语法 Console.WriteLine(s ?? "我是默认值");

    八, const, readonly

      1. const 常量:

        a. 只能在创建实例时赋值且必须得赋值,赋值后后不能更改值

        b. 静态的

        c. 修饰引用类型只能是 string 或 null, 其他引用类型无法修饰

      2. readonly 只读:

        a. 只能在创建实例时赋值,或在构造函数里赋值

        b. 可以是静态的,也可以是非静态的。静态的只能在静态构造里赋值,非静态的只能在非静态构造里赋值。

        c. 可以修饰任何类型

  • 相关阅读:
    Java & PHP RSA 互通密钥、签名、验签、加密、解密
    Spring Cloud:Security OAuth2 自定义异常响应
    Spring Cloud:统一异常处理
    Spring Cloud:多环境配置、eureka 安全认证、容器宿主机IP注册
    Hexo + GitEE 搭建、备份、恢复、多终端
    Spring:AOP面向切面编程
    如何找到适合自己的文档工具?
    比较好玩的工具类合集推荐!!!
    C++11 如何使代码仅执行一次?
    CMake 常用操作有哪些?
  • 原文地址:https://www.cnblogs.com/fzz2727551894/p/4129146.html
Copyright © 2011-2022 走看看