C#12中的Primary Constructors(主构造函数)

耶耶耶耶耶  金牌会员 | 2023-12-23 20:11:51 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 861|帖子 861|积分 2583

什么是主构造函数
把参数添加到class与record的类声明中就是主构造函数。例如
  1. class Person(string name)
  2. {
  3.     private string _name = name;
  4. }   
复制代码
这种写法与以下代码写法一样
  1. class Person
  2. {
  3.     private string _name;
  4.     public Person(string name)
  5.     {
  6.         _name = name;
  7.     }
  8. }
复制代码
需要注意的是,类的所有其他构造函数都必须通过 this() 构造函数调用直接或间接调用主构造函数。
  1. class Person(string name)
  2. {
  3.     public Person(int age,string name):this(name)
  4.     {
  5.                
  6.     }
  7. }
复制代码
主构造函数参数的最常见用途包括但不限于以下几个方面:

  • 初始化基类。
  • 初始化成员字段或属性。
  • 简化依赖注入
下面分别介绍。
 
初始化基类
可以从派生类的主构造函数调用基类的主构造函数。 这是编写必须调用基类中主构造函数的派生类的最简单方法。
  1. class Person(string name)
  2. {
  3.     private string _name = name;
  4. }
  5. class Man(string name):Person(name)
  6. {
  7. }
复制代码
派生类如没主构造函数,可以在派生类中创建一个构造函数,用于调用基类的主构造函数
  1. class Person(string name)
  2. {
  3.     private string _name = name;
  4. }
  5. class Woman : Person
  6. {
  7.     public Woman(string name) : base(name)
  8.     {
  9.     }
  10. }
复制代码
 
初始化成员字段或属性
以下代码,通过主构造函数初始化了一个字段:
  1. class Person(string name)
  2. {
  3.     private string _name = name;
  4. }
复制代码
 
简化依赖注入
主构造函数的另一个常见用途是指定依赖项注入的参数。 下面的代码创建了一个简单的控制器,使用时需要有一个服务接口:
  1. public interface IService
  2. {
  3.     Distance GetDistance();
  4. }
  5. public class ExampleController(IService service) : ControllerBase
  6. {
  7.     [HttpGet]
  8.     public ActionResult<Distance> Get()
  9.     {
  10.         return service.GetDistance();
  11.     }
  12. }
复制代码
总的来说,主构造函数简化了我们的代码编写,一旦使用了主构造函数,主构造函数参数是必须调用的构造函数的参数。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表