美文网首页
C# 7.3 新增功能

C# 7.3 新增功能

作者: 程序员ken | 来源:发表于2023-04-07 17:19 被阅读0次

    1. 索引 fixed 字段不需要进行固定

    注意此项是针对指针,也就是不安全代码这块

    定义一个结构体

    unsafe struct S {     
        public fixed int myFixedField[10]; 
    }
    

    在早期版本的 C# 中,需要固定变量才能访问属于 myFixedField 的整数之一。 现在,以下代码进行编译,而不将变量 p 固定到单独的 fixed 语句中:

    class C {    
    static S s = new S();   
    unsafe public void M()  
      {        
             int p = s.myFixedField[5];  
      } 
    }
    

    变量 p 访问 myFixedField 中的一个元素。 无需声明单独的 int* 变量。 请注意,你仍然需要 unsafe 上下文。 在早期版本的 C# 中,需要声明第二个固定的指针:

    class C {     
            static S s = new S();    
            unsafe public void M()     {    
                fixed (int* ptr = s.myFixedField){    
                    int p = ptr[5];      
                }    
            }
    }
    

    有关详细信息,请参阅有关 fixed 语句的文章。

    2.可能会重新分配 ref 局部变量

    现在,在对 ref 局部变量进行初始化后,可能会对其重新分配,以引用不同的实例。 以下代码现在编译:

    ref VeryLargeStruct refLocal = ref veryLargeStruct; // 初始化
    refLocal = ref anotherVeryLargeStruct;              // 重新分配后,反射引用不同的存储。
    

    3 stackalloc 数组支持初始值设定项

    注意此项是针对指针,也就是不安全代码这块

    当你对数组中的元素的值进行初始值设定时,你已能够指定该值:

    var arr =  new int[3] {1, 2, 3};
    var arr2 = new int[] {1, 2, 3};
    

    现在,可向使用 stackalloc 进行声明的数组应用同一语法:

    int* pArr = stackalloc int[3] {1, 2, 3};
    int* pArr2 = stackalloc int[] {1, 2, 3};
    Span<int> arr = stackalloc [] {1, 2, 3};
    

    4 增强的泛型约束

    现在,可以将类型 System.Enum 或 System.Delegate 指定为类型参数的基类约束。
    现在也可以使用新的 unmanaged 约束来指定类型参数必须为“非托管类型” 。 “非托管类型” 不是引用类型,且在任何嵌套级别都不包含任何引用类型。
    有关详细信息,请参阅有关 where 泛型约束和类型参数的约束的文章。
    将这些约束添加到现有类型是不兼容的更改。 封闭式泛型类型可能不再满足这些新约束的要求。

    5 元组支持 == 和 !=

    C# 元组类型现在支持 == 和 !=。 有关详细信息,请参阅有关元组一文中的转换等式部分。

    6.将特性添加到自动实现的属性的支持字段

    现在支持此语法:

    [field: SomeThingAboutFieldAttribute]
    public int SomeProperty { get; set; }
    

    属性 SomeThingAboutFieldAttribute 应用于编译器生成的 SomeProperty 的支持字段。

    in 方法重载解析

    在添加 in 参数修饰符时,这两个方法将导致多义性:

    static void M(S arg);
    static void M(in S arg);
    

    小破站: https://www.bilibili.com/video/BV15o4y167uX
    抖茵: https://www.douyin.com/user/self?modal_id=7207950726826364219&showTab=post

    相关文章

      网友评论

          本文标题:C# 7.3 新增功能

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