zoukankan      html  css  js  c++  java
  • C# 9.0 新特性

    Record

    1、record类型是引用类型
    2、为什么会新增这一类型?
        1)面向对象编程中,比较两对象是否相等,一般比较两对象的内存地址是否一致。
        2)然而在一些语境中,我们关注的是对象的字段/属性是否相等。在这种情况下进行比较则需要将对象内的所有字段/属性的值依次进行比较,若全部相等则表示两对象相等,否则不相等。为了简化该语境下的比较,微软新增了record类型,此时可以直接进行比较。
    
        public class Cat{
            public string NickName { get; set; }
            public int Age { get; set; }
        }
    
        public record Dog{
            public string NickName { get; set; }
            public int Age { get; set; }
        }
    
        var cat1 = new Cat{ NickName="二愣子", Age=1 };
        var cat2 = new Cat{ NickName="二愣子", Age=1 };
        Console.WriteLine(cat1 != cat2);
    
        var dog1 = new Dog{ NickName="二狗子", Age=2 };
        var dog2 = new Dog{ NickName="二狗子", Age=2 };
        Console.WriteLine(dog1 == dog2); 
    
    

    模式匹配

    演变1:
        int score = 99;
    	switch(score){
            case 10:
                Console.WriteLine("丢人了!!!");
                break;
            case 60:
                Console.WriteLine("勉强合格!");
                break;
            case 99:
                Console.WriteLine("上帝眷顾!");
                break;
        }
    
    演变2:
        int score = 99;
        switch (score)
        {
            case 0:
                Console.WriteLine("缺考?");
                break;
            case > 0 and <= 30:
                Console.WriteLine("太烂了");
                break;
            case > 30 and < 60:
                Console.WriteLine("还是不行");
                break;
            case >= 60 and < 80:
                Console.WriteLine("还得努力");
                break;
            case >= 80 and < 90:
                Console.WriteLine("秀儿,真优秀");
                break;
            case >= 90 and <= 100:
                Console.WriteLine("不错,奇迹");
                break;
        }
    
    演变3:
        public class Order{
            public float Qty {get; set;}
            public string Name {get; set;}
        }
        Order od = new Order{ Qty = 1000f, Name = "黄金" };
        switch(od){
            case {  Qty: > 1000f, Name:"黄金" }:
                Console.WriteLine("真贵!!!");
                break;
        }
    
    演变4:
        public class Order{
            public float Qty {get; set;}
            public string Name {get; set;}
        }
        Order od = new Order{ Qty = 1000f, Name = "黄金" };
        var res = od switch {
            { Qty: > 1000f, Name:"黄金"  } => true,
            _ => false
        };
    
    扩展用法:
        object n = 5000000L;
        if(n is long x)
        {
            Console.WriteLine("它是个长整型,存放的值是:{0}", x);
        }
    
    

    init

    init 只用于只读属性的初始化阶段,对于可读可写的属性。
    
    最初我们进行属性初始化
        public class Dog
        {
            public int No { get; } = 0;
            public string Name { get; } = "no name";
            public int Age { get; } = 1;
    
            public Dog(int no, string name, int age)
            {
                No = no;
                Name = name;
                Age = age;
            }
        }
    
      => Dog dog = new(1001, "亚亚", 4);
    
    现在
        public class Cat
        {
            public int No { get; init; }
            public string Name { get; init; }
            public int Age { get; init; }
        }
    
      => Cat cat = new Cat { No = 100, Name = "丫丫", Age = 4 };
    
    只读属性初始化结束后不可赋值,故 dog.No = 1; 或 cat.No = 1;都会报错。
        
    
  • 相关阅读:
    MySQL5.7(64位)windows下的安装
    Python---更改pip源
    .NET WEB技术小记
    前端板书1
    Hadoop伪分布式系统的搭建(ubuntu)
    Hive的基本操作
    SQLServer2008附加数据库不成功 操作系统错误5
    VUE学习小结
    jQuery入门基础(选择器)
    Linq(高级查询)
  • 原文地址:https://www.cnblogs.com/az4215/p/15443210.html
Copyright © 2011-2022 走看看