建筑网站推荐知乎,wordpress 主题 百科,收费用的网站怎么做,手机怎么做电子书下载网站C# 12 中最引人注目的新功能之一是对主构造函数的支持。主构造函数的概念并不新鲜。包括 Scala、Kotlin 和 OCaml 在内的多种编程语言都支持直接在声明类的位置集成构造函数参数。
在本文中#xff0c;我们将仔细研究主构造函数以及如何在 C# 12 中使用它们。若要运行本文中提…C# 12 中最引人注目的新功能之一是对主构造函数的支持。主构造函数的概念并不新鲜。包括 Scala、Kotlin 和 OCaml 在内的多种编程语言都支持直接在声明类的位置集成构造函数参数。
在本文中我们将仔细研究主构造函数以及如何在 C# 12 中使用它们。若要运行本文中提供的代码示例您应该在系统中安装 Visual Studio 2022。
在 Visual Studio 中创建控制台应用程序项目
首先让我们在 Visual Studio 中创建一个 .NET Core 控制台应用程序项目。假设您的系统中安装了 Visual Studio 2022请按照下面概述的步骤创建新的 .NET Core 控制台应用程序。 启动 Visual Studio IDE。单击“创建新项目”。在“创建新项目”窗口中从显示的模板列表中选择“控制台应用程序.NET Core”。点击下一步。在“配置新项目”窗口中指定新项目的名称和位置。点击下一步。在接下来显示的“其他信息”窗口中选择“.NET 8.0长期支持”作为您要使用的框架版本。单击“创建”。
在本文的后续部分中我们将使用此 .NET 8 控制台应用程序项目来处理主构造函数。 什么是主构造函数
主构造函数使您能够在类或结构中声明构造函数并在整个类型主体中使用可用的参数。使用主构造函数您可以为类或结构创建构造函数而无需编写代码即无需显式声明私有数据成员并实现构造函数以将构造函数参数的值分配给这些数据成员。
以下代码片段说明了在结构内声明的主构造函数。
public readonly struct Rectangle(double x, double y)
{//Members of the struct Rectangle
}
下面是在类中声明的主构造函数的简单实现。
public class Rectangle(double x, double y)
{//Members of the class Rectangle
}
主要构造函数参数的作用域为整个类。除了辅助构造函数之外所有实例成员都可以访问它们。在 C# 中编译器推断我们需要哪些私有字段并捕获相应的值。
考虑以下代码段它为名为 Customer 的类实现主构造函数。
public class Customer(int id, string FirstName, string LastName)
{//Implement the class members here
}
与此类相关的属性将使用主构造函数的参数自动初始化。
C# 中主构造函数的优缺点
C# 中的主构造函数具有三个主要优点。
简化的语法通过使用主构造函数您可以直接在构造函数参数中声明和初始化属性从而减少代码重复。轻松初始化您可以利用主构造函数来使用默认值或作为构造函数参数传递的特定值来初始化类的属性。不变性您可以利用主构造函数中初始化的属性的 init 修饰符以确保它们在对象初始化后是只读的。
C# 中的主构造函数也有许多缺点。
灵活性降低主构造函数设计得很简单这会限制它们的灵活性。当需要复杂的初始化逻辑或需要额外的操作例如验证、调度或日志记录时它们可能不适合。 不太明确的代码减少样板代码是一个很好的做法但它也可以使代码不那么明确。缺乏经验的开发人员可能需要帮助来理解属性如何初始化或构造函数如何工作。兼容性问题将主构造函数的新语法无缝集成到现有代码库中可能具有挑战性特别是在代码库庞大且复杂的情况下。对访问修饰符的控制有限与传统构造函数相比主构造函数对访问修饰符的控制较少。因此主构造函数可能不适合需要对可访问性进行细粒度控制的场景。学习曲线由于主构造函数对于 C# 编程语言来说是新的因此您的开发人员可能需要时间来加快使用它的速度这可能会减慢项目的开发速度。
在 C# 中使用带有主构造函数的重载构造函数
您可以在任何具有主构造函数的类中使用重载构造函数。以下代码片段说明了如何在具有主构造函数的类中创建多个构造函数。
public class User(int id, string userName, string password)
{//Implement the members of the class here
}// Other members of the class
}
在记录类型中使用主构造函数与在 C# 中使用类
虽然记录和类都支持主构造函数但行为上存在细微差别。例如以下是定义使用主构造函数的记录类型的方法
public record AuthorRecord(int Id, string firstName, string lastName, string address, string phone);
以下是定义使用主构造函数的类的方法
public record AuthorClass(int Id, string firstName, string lastName, string address, string phone);
您可以创建上述记录类型的实例如下所示。
var authorRecord AuthorRecord(int Id, string firstName, string lastName, string address, string phone);
但是如果您尝试按照下面所示的方式为记录类型的数据成员赋值您将遇到编译器错误。
authorRecord.Id 1;
相比之下您可以创建上述类类型的实例并向其数据成员赋值如下所示而不会出现任何编译器错误。
var authorClass AuthorClass(int Id, string firstName, string lastName, string address, string phone);
authorClass.Id 1;
在 C# 的主构造函数中使用依赖注入
在 C# 应用程序中实现依赖项注入时您可以利用主构造函数。让我们通过一个例子来理解这一点。下面的代码说明了如何在 C# 中实现构造函数注入。
public class AuthorService
{private readonly IAuthorRepository _authorRepository;public AuthorService(IAuthorRepository authorRepository){_authorRepository authorRepository;}public async TaskIEnumerableAuthor GetAll(){return await _authorRepository.GetAll();}
}
最后请注意如何使用主构造函数使代码更加清晰如下面的代码所示。
public class AuthorService (IAuthorRepository authorRepository)
{public async TaskIEnumerableAuthor GetAll(){return await authorRepository.GetAll();}
}
尽管主构造函数最初是在 C# 9 中引入的但它们仅限于记录类型。使用 C# 12您可以在记录类型、类和结构中使用主构造函数帮助您编写更清晰、更简洁的样板代码。 作者Joydip Kanjilal
更多技术干货请关注公号【云原生数据库】
squids.cn云数据库RDS迁移工具DBMotion云备份DBTwin等数据库生态工具。
irds.cn多数据库管理平台私有云。