C#7.0中新特性汇总

2019-12-30 13:57:28于丽

也有一些限制,以确保安全:

•你只能返回“安全返回”的引用:一个是传递给你的引用,一个是指向对象中的引用。

•本地引用会被初始化成一个本地存储,并且不能指向另一个存储。

异步返回类型

到现在为止,C# 的异步方法必须返回 void,Task 或 Task<T>。C#7.0 允许其它类型以这种能从一个方法中返回的方式被定义,因为它们可以以异步方法被返回的方式来定义其它类型。

例如我们计划建立一个 ValueTask<T> 结构类型的数据。建立它是为了防止异步运行的结果在等待时已可用的情境下,对 Task<T> 进行分配。对于许多实例中设计缓冲的异步场景,这可以大大减少分配的数量并显著地提升性能。

Note:异步返回类型尚未在 Preview 4 中提供。

更多的 expression bodied 成员:

expression bodied 的方法和属性是对 C# 6.0 的巨大提升。C# 7.0 为 expression bodied 事件列表增加了访问器,结构器和终结器。


class Person
{
private static ConcurrentDictionary<int, string> names = new ConcurrentDictionary<int, string>();
private int id = GetId();
public Person(string name) => names.TryAdd(id, name); // constructors
~Person() => names.TryRemove(id, out *); // destructors
public string Name
{
get => names[id]; // getters
set => names[id] = value; // setters
}
}

Note:这些额外增加的 expression bodied 的成员尚未在 Preview 4 中提供。

这是社区共享的示例,而不是 Microsoft C# 编译团队提供的,还是开源的!

Throw 表达式

在表达式中间抛出一个异常是很容易的:只需为自己的代码调用一个方法!但在 C#7.0 中,我们允许在任意地方抛出一个表达式:


class Person
{
public string Name { get; }
public Person(string name) => Name = name ?? throw new ArgumentNullException(name);
public string GetFirstName()
{
var parts = Name.Split(" ");
return (parts.Length > 0) ? parts[0] : throw new InvalidOperationException("No name!");
}
public string GetLastName() => throw new NotImplementedException();
}

Note:Throw 表达式尚未在Preview 4中提供。

以上所述是小编给大家介绍的C#7.0中新特性汇总,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对ASPKU网站的支持!


注:相关教程知识阅读请移步到c#教程频道。