C#各版本新功能 C#7.2

高效安全的代码增强功能

它们旨在尽量减少值类型的复制,而不造成与引用类型使用相关的内存分配,进而提升性能

  • 针对实参的 in 修饰符,指定形参通过引用传递,但不通过调用方法修改。 将 in 修饰符添加到参数是 源兼容的更改 。
  • 针对方法返回的 ref readonly 修饰符,指示方法通过引用返回其值,但不允许写入该对象。 如果向某个值赋予返回值,则添加 ref readonly 修饰符是 源兼容的更改 。 将 readonly 修饰符添加到现有的 ref 返回语句是 不兼容的更改 。 它要求调用方更新 ref 本地变量的声明以包含 readonly 修饰符。
  • readonly struct 声明,指示结构不可变,且应作为 in 参数传递到其成员方法。 将 readonly 修饰符添加到现有的结构声明是 二进制兼容的更改 。
  • ref struct 声明,指示结构类型直接访问托管的内存,且必须始终分配有堆栈。 将 ref 修饰符添加到现有 struct 声明是 不兼容的更改 。 ref struct 不能是类的成员,也不能用于可能在堆上分配的其他位置。
    编写高效安全代码

非尾随命名参数

正常使用即可,不用看;

数值数字的前导下划线

int binaryValue = 0b_0101_0101;

private protected 访问修饰符

private protected :访问限于包含类或当前程序集中派生自包含类的类型

// Assembly1.cs 
// Compile with: /target:library 
public class BaseClass
{
    private protected int myValue = 0;
}


public class DerivedClass1 : BaseClass
{
    void Access() //正确方法
    {
        myValue = 5; //可以正常访问
    }

void Method1()
{
        var baseObject = new BaseClass();
        // baseObject.myValue = 5;  // because myValue can only be accessed by    classes derived from BaseClass.
    }
}

protected internal :访问限于当前程序集或派生自包含类的类型

条件ref 表达式

ref var r = ref (arr != null ? ref arr[ 0 ] : ref otherArr[ 0 ]);
posted @ 2020-03-19 15:00  maanshancss  阅读(381)  评论(0编辑  收藏  举报