乐趣区

关于前端:C-73-新增功能

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…

退出移动版