首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C# 8.0的三个值得关注的新特性

在不分配新值的情况下,创建一个新的 int 值,会导致 int 值为 0 而不是 null。C# 2.0 介绍了带有“?”符号的变量原语的可空版本。因此,int?...因此需要做的是,创建此功能的方法,而不是为开发人员带来无法估量的工作量。 根据设计方案,C# 团队决定采取一个允许开发者可以选择可空引用类型的方法。这将是一个工程级别的设定,以便启用对可空引用的验证。...这个类本质上是一个非常轻量级的类,是一个字段集合,能够帮助快速创建 POCO 类型的对象,同时也可以解决比较对象是否相等时的关键问题。...随着新方法添加到了接口中,实现它们的任务就落在了实现接口的各个类中。因为各个实现不必须共有同一个父类,添加到接口的方法就可以在各自的类中实现。...通常我们会为接口添加这些功能并在所有的类中实现它们。

87130

C# 8.0的三个值得关注的新特性

在不分配新值的情况下,创建一个新的 int 值,会导致 int 值为 0 而不是 null。C# 2.0 介绍了带有“?”符号的变量原语的可空版本。因此,int?...因此需要做的是,创建此功能的方法,而不是为开发人员带来无法估量的工作量。 根据设计方案,C# 团队决定采取一个允许开发者可以选择可空引用类型的方法。这将是一个工程级别的设定,以便启用对可空引用的验证。...这个类本质上是一个非常轻量级的类,是一个字段集合,能够帮助快速创建 POCO 类型的对象,同时也可以解决比较对象是否相等时的关键问题。...随着新方法添加到了接口中,实现它们的任务就落在了实现接口的各个类中。因为各个实现不必须共有同一个父类,添加到接口的方法就可以在各自的类中实现。...通常我们会为接口添加这些功能并在所有的类中实现它们。

1.5K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    为什么我们无法写出真正可重用的代码?

    几周前,Uwe Friedrichsen 在他一篇博文中提出一个这样的问题: ……可重用性是软件的制胜法宝:每当一个新的架构范式出现,“可重用性”就成了是否采用该范式的一个核心考虑因素。...需要注意以下几点: 代码的结构是固定的,有一个命名空间、一个类和一个方法。每个东西都有自己的位置,它们的存在都有自己的理由。 从结构上看,添加新规则似乎会让事情变复杂。...在 C# 代码里,我没有创建节点,而是通过结构来组织代码。在 OOP 中,每一样东西都有它们特定的位置,什么时候该放在哪里都有可遵循的规则。 因此,从表面上看,C# 代码更适合用来创建可重用的组件。...这个类之所以是这样,是因为它是一个 C# 控制台应用程序。F# 和 C# 代码的行数之所以差异巨大,是因为 C# 应用程序是一个模板,所有东西都被放在一个紧密耦合且严格的结构中。...纯 FP 范式将创建可重用的代码,但在大型的应用程序中,调用方的复杂性会增加。OO 范式将创建不可重用的代码。在很多情况下,OO 是更好的范例,只是它永远不会创建出一般意义上的可重用组件。

    99510

    C# 发展历史及版本新功能介绍

    但是,如果要创建在 .NET Framework 之外计算的表达式目录树(例如,在 SQL Server 中),则不应在 lambda 表达式中使用方法调用。...任何静态类只要包含了至少一个扩展方法,它的元数据中也会应用这个attribute,任何一个程序集包含了至少一个符合上述特点的静态类,它的元数据也会应用这个attribute。...如果代码用了一个不存在的实例方法,编译器会快速的扫描引用的所有程序集,判断它们哪些包含了扩展方法,然后,在这个程序集中,可以扫描包含了扩展方法的静态类。...如果同一个命名空间中的两个类含有扩展类型相同的方法,就没有办法做到只用其中一个类中的扩展方法。...除上方链接的 TAP 文章中介绍的 async 和 await 之外,还有其他处理异步代码的方法,但本文档将在下文中重点介绍语言级别的构造。

    4.2K20

    C#中一些好用但不为人知的特性

    通过定义静态类和方法,并使用this关键字作为第一个参数来指定要扩展的类型,你可以为任何类型添加自定义行为。这使得代码更加模块化和可重用。 4....匿名类型(Anonymous Types) 在C#中,你可以使用匿名类型来创建一个没有显式命名的类型,该类型只包含一些属性,用于在代码中传递数据。...通过使用var关键字和花括号{}创建匿名类型,你可以简化代码并避免创建不必要的类。这在临时需要一个数据结构时非常有用。 5....泛型(Generics) 泛型允许你编写可以处理不同数据类型的通用代码。通过定义泛型方法、类或结构体,你可以编写灵活且可重用的代码,而无需为每种数据类型编写特定的实现。...通过定义特性类并将其应用于类、属性、方法等元素上,你可以为编译器提供额外的指导信息,或者用于运行时反射来获取元数据信息。特性在许多情况下都非常有用,例如控制序列化、配置设置、异常过滤等。

    12610

    C# 9.0 中的新增功能

    如果查看 IL,它就是一个类。 它是不可变的,因为在创建它后,无法修改任何属性。...方法签名取决于记录类型是否密封以及直接基类是否为对象。 记录应具有以下功能: 相等性是基于值的,包括检查类型是否匹配。 例如,即使两条记录的名称相同,Student 也不能等于 Person。...可在 with 表达式中设置任意数量的属性。 你可编写除“克隆”方法以外的任何合成成员。 如果记录类型的方法与任何合成方法的签名匹配,则编译器不会合成该方法。...从某种意义上讲,可认为一个文件包含通常位于 Program 类的 Main 方法中的语句。 此功能最常见的用途之一是创建材料。...模块初始化表达式方法: 必须是静态的 必须没有参数 必须返回 void 不能是泛型方法 不能包含在泛型类中 必须能够从包含模块访问 最后一个要点实际上意味着该方法及其包含类必须是内部的或公共的。

    1.7K20

    C# 9.0新特性介绍

    如果查看 IL,它就是一个类。 它是不可变的,因为在创建它后,无法修改任何属性。...方法签名取决于记录类型是否密封以及直接基类是否为对象。 记录应具有以下功能: 相等性是基于值的,包括检查类型是否匹配。 例如,即使两条记录的名称相同,Student 也不能等于 Person。...从某种意义上讲,可认为一个文件包含通常位于 Program 类的 Main 方法中的语句。...协变返回类型为替代函数的返回类型提供了灵活性。替代的虚函数可返回从基类方法中声明的返回类型派生的类型。这对于记录和其他支持虚拟克隆或工厂方法的类型很有用。...模块初始化表达式方法: 必须是静态的 必须没有参数 必须返回 void 不能是泛型方法 不能包含在泛型类中 必须能够从包含模块访问 最后一个要点实际上意味着该方法及其包含类必须是内部的或公共的。

    2K20

    python 进程间通信(三) -- 进程同步原语及管道与队列

    python 中的其他的进程间通信方式 — 进程同步原语及管道与队列。...Queue 队列 multiprocessing 包中的 Queue 类是数据结构中 FIFO 队列的实现,包含下面三种实现: Queue — 最通用的队列 SimpleQueue — 最简单通用的队列实现...Queue Queue 是通过一个管道实现的 FIFO 进程间通信结构,它实现了标准库 queue.Queue 除 task_done 和 join 之外的所有方法。...他是通过一个后台线程将用户放入或取出数据的请求传递给管道,受此异步实现的影响,所有判断队列中元素数量的方法,包括判断队列是否已满或是否为空的方法返回的数值可能都是不准确的。 5.1.1....调用该方法后,进程会一直阻塞,直到所有数据都被刷入队列中的管道,队列的后台线程退出。 5.1.9.

    82320

    C#开发人员应该知道的13件事情

    正确性 代码审查,静态分析,动态分析,测试 代码不仅需要在语法上有效,而且必须按照开发人员的意图并满足项目需求。 功能 测试 测试验证代码是否满足要求,如正确性,可扩展性,鲁棒性和安全性。...对于公开了工作API的代码来说,将异常包含于自定义异常中,是特别有用的。异常是方法的可见接口的一部分,应该与参数和返回值一起被控制。可能导致更多异常的方法,是不应该被使用在可维护解决方案中的。...如果你尝试访问一个空引用,以为它是一个对象的有效引用一样 - 例如,通过访问一个属性或方法,运行时将抛出一NullReferenceException异常。...忽略保存返回值 与结构体不同,类是引用类型,方法可以修改引用的对象。然而,不是所有的对象方法都实际修改了引用的对象,一些会返回一个新对象。...例如,WPF中的数据绑定,会将属性名称指定为字符串。如果不小心更改该属性名称,你将会无意中创建了一个编译器无法防护的问题。 以上就是所有C#开发人员应该知道的13件事情。

    2.3K90

    C#7.0 新增功能

    04 模式匹配 模式匹配 是一种可让你对除对象类型以外的属性实现方法分派的功能。 你可能已经熟悉基于对象类型的方法分派。 在面向对象的编程中,虚拟和重写方法提供语言语法来实现基于对象类型的方法分派。...可以在每个 case 标签中测试 switch 表达式的类型。 与 is 表达式一样,可以为该类型指定一个新变量。 可以添加 when 子句以进一步测试该变量的条件。...语言还有多个规则,可保护你免于误用 ref 局部变量和返回结果: 必须将 ref 关键字添加到方法签名和方法中的所有 return 语句中。...C# 7.0 扩展了可作为表达式实现的允许的成员。 在 C# 7.0 中,你可以在属性 和索引器 上实现构造函数 、终结器 以及 get 和 set 访问器。...将方法更改为 expression bodied 成员是二进制兼容的更改。 08 引发表达式 在 C# 中,throw 始终是一个语句。

    1.4K10

    程序员需要了解的.NET Framework 编程的好与坏

    WPF 使用可扩展应用程序标记语言 ( XAML ) 的功能。 Windows 窗体是 .NET Framework 中的一个 GUI 类库。...存储的数据是较早的信息请求的结果,或者是存储在其他地方的信息的副本,这些信息需要更长的时间来检索。 .NET 中的缓存系统健壮且易于使用。它还被设计为可扩展的。...对象缓存类允许开发人员创建自定义缓存实现,用于提高 Windows 客户端和服务器应用程序的性能和可伸缩性。...资料来源:2021 年堆栈溢出调查 同时,.NET Framework 与 .NET 5 和 .NET Core 分别位列第一和第二,成为除 Web 开发之外最常用的框架。 ​...如何时使用 .NET 可扩展的产品。通常,业务需求不断增长,您的软件必须随之扩展。.NET 提供了一个可扩展的环境,并允许重新设计正在进行的应用程序,以满足不断增长的业务需求。 跨平台需求。

    1.9K30

    Unity通用渲染管线(URP)系列(十四)——多相机(Camera Blending & Rendering Layers)

    为了支持替换,覆盖和更多奇怪的分层选项,我们将为启用post FX的像机添加可配置的最终混合模式。我们将为这些设置创建一个新的可序列化的CameraSettings配置类,就像对阴影所做的那样。...由于C#是强类型的,因此我们无法像HLSL那样简单地重新解释C#中的数据。我们可以通过使用并集结构来重命名数据类型。通过向int添加ReinterpretAsFloat扩展方法来隐藏此方法。...为此方法创建一个静态的ReinterpretExtensions类,该类最初只是执行常规的类型转换。 ?...首先,要指示字段表示渲染层掩码,请创建一个扩展PropertyAttribute的RenderingLayerMaskFieldAttribute类。这只是一个标记属性,不需要执行其他任何操作。...2.6 逐相机的灯光掩码 尽管Unity的RP并没有这样做,但是除了几何图形之外,还可以为每个像机设置灯光掩码。

    9K22

    c#面试题抽象类和接口的区别-金三银四面试:C#程序员经常遇到的30道基础面试题,想你所想

    16、请编写一个捕获所有异常的异常处理代码?   17、委托与事件是什么关系?为什么要使用委托?   18、一个类中有几种元素?   ...23、C#中有很多类被定义为public有什么意义?   24、修饰符有什么含义?   25、JAVA的代码是半编译半解释的,C#代码是否也是这样的?   ...在C#中,new关键字可用作运算符和修饰符。   (1)new运算符用于在堆上创建对象和调用构造函数。   (2)new修饰符用于隐藏基类成员的继承成员。   ....;   11、C#中有没有静态构造函数,如果有是做什么用的?   有。静态构造函数用于初始化类。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。...相反,流提供一种向后备存储器写入字节和从后备存储器读取字节的方式,后备存储器可以为多种存储媒介之一。正如除磁盘外在多种后备存储器一样,除文件流之外也存在多种流。

    2K20

    【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则

    原则3 推荐使用is 或as操作符             而不是强制类型转换 ● C#中,is和as操作符的用法概括如下: is : 检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,永远不会抛出异常...原则12 区分值类型和引用类型 ● C#中,class对应引用类型,struct对应值类型。 ● C#不是C++,不能将所有类型定义成值类型并在需要时对其创建引用。...C#也不是Java,不像Java中那样所有的东西都是引用类型。你必须在创建时就决定类型的表现行为,这相当重要,因为稍后的更改可能带来很多灾难性的问题。...2)基类可以为接口中的方法提供默认的实现,随后,派生类也可以声明其实现了该接口,并从基类中继承该实现。 3)实现接口拥有的选择要比创建和覆写虚方法多。...我们可以为类层次创建密封(sealed)的实现,虚实现或者抽象的契约。还可以创建密封的实现,并在实现接口的方法中提供虚方法进行调用。

    1.8K30

    C#与Java

    基于类:每个 Java 程序都封装在一个类中。 静态主方法:Java 应用程序的入口点是静态主方法。...扩展方法 C# 中的扩展方法是一项强大的功能,它允许您在不更改现有类型的情况下向现有类型添加新方法。它们在函数式编程中特别有用,用于创建流畅且富有表现力的代码。...下面是一个示例来说明如何使用扩展方法: 场景:假设您要向字符串类型添加一个方法,用于检查字符串是否以特定字符开头和结尾。...定义扩展方法: 首先,您需要创建一个静态类来包含扩展方法: using System; public static class StringExtensions { // Extension...扩展方法是 C# 中的一项关键功能,尤其是在与 LINQ 和其他函数式编程模式结合使用时。 不可变集合 在 C# 中,不可变集合是创建后无法修改的集合。

    19910

    .NET周刊【5月第3期 2024-05-19】

    AutoMapper 是一个.NET 对象映射库,它的安装方法是通过 NuGet 包。你需要创建源对象和目标对象,并在映射配置文件中定义它们之间的映射规则。...Garnet 表现出更好的吞吐量、可扩展性和低延迟,在 Azure VM 上的测试中表现出色,且支持跨平台。...最后,如果需要实现可配置的任务调度或动态任务调度,还需定义一个存储所有任务元数据的 Store,并实现了一个依赖于配置的 Store。...C#应用的欢迎界面窗体方案 - 开源研究系列文章 https://www.cnblogs.com/lzhdim/p/18170822 作者整理了代码,改善了应用的欢迎界面窗体,创建成一个通用型类库,方便读者在自己项目中使用...https://erikej.github.io/ef6/dotnet/2024/05/16/ef6-whatsnew.html Orleans 8 中针对可扩展分布式应用程序的新增功能 - .NET

    12400

    C#各版本新增加功能(系列文章)

    5.0 版是C#语言有针对性的一个版本。 对此版本中所做的几乎所有工作都归入另一个突破性语言概念:适用于异步编程的 async 和 await 模型。...C#3.0 新增功能01 自动实现的属性 C#3.0 新增功能02 匿名类型 C#3.0 新增功能03 隐式类型本地变量 C#3.0 新增功能04 扩展方法 C#3.0 新增功能05 分部方法...C#2.0 新增功能01 分部类与分部方法 C#2.0 新增功能02 泛型 C#2.0 新增功能03 匿名方法 C#2.0 新增功能04 可以为 null 的类型 C#2.0 新增功能05...迭代器 C#2.0 新增功能06 协变与逆变 C#2.0 新增功能07 getter/setter 单独可访问性 除现有功能以外的其他 C# 2.0 功能: 方法组转换(委托) 静态类 委托推断 C...C# 1.0 C# 1.0 的主要功能包括: 类 结构 接口 事件 属性 委托 表达式 语句 特性 C# 与 .NET Framework 对应关系 下表中列出 C#、.NET、VS版本对应关系 C#版本

    1.9K10

    编写高质量代码改善C#程序的157个建议

    前言   泛型并不是C#语言一开始就带有的特性,而是在FCL2.0之后实现的新功能。基于泛型,我们得以将类型参数化,以便更大范围地进行代码复用。同时,它减少了泛型类及泛型方法中的转型,确保了类型安全。...本文主要学习记录以下内容:   建议32、总是优先考虑泛型   建议33、避免在泛型类型中声明静态成员   建议34、为泛型参数设定约束 建议32、总是优先考虑泛型   泛型的优点是多方面的,无论是泛型类还是泛型方法都同时具备可重用性...}   可以把T理解为一个占位符,在C#泛型编译生成的IL代码中,T就是一个占位符的角色。...在C#的世界中,所有类型(包括值类型和引用类型)都是继承自object,如果要让MyList足够通用,就需要让MyList针对object编码,代码如下: public class MyList...泛型为C#带来的是革命性的变化,FCL之后的很多功能都是借助泛型才得到了很好的实现,如LINQ。LINQ借助于泛型和扩展方法,有效地丰富了集合的查询功能,同时避免了代码爆炸并提升了操作的性能。

    62120

    C# .NET面试系列二:面向对象

    可空性:class 可以为 null,因为引用类型的变量可以赋值为 null。struct 是值类型,不可以为 null。可以使用 Nullable 结构(或简称为 T?)实现可空性。...抽象类是否可实现(implements)接口?抽象类是否可继承实现类(concrete class)?...在 .Net 中所有可序列化的类都被标记为_?在.NET中,所有可序列化的类都应该被标记为 Serializable 特性。...属性和特性在C#中分别服务于不同的目的,但它们都有助于提高代码的可读性、可维护性和可扩展性。20. 当使用 new B() 创建 B 的实例时,产生什么输出?...能用 foreach 遍历访问的对象需要实现 接口或声明方法的类型在C#中,foreach 循环用于迭代可枚举集合中的元素。

    25810
    领券