C#主构造函数

举报
Rolle 发表于 2024/10/30 23:54:04 2024/10/30
【摘要】 在C#中,构造函数是一种特殊的方法,用于在创建对象时初始化对象的状态。从C# 9.0开始,引入了主构造函数(Primary Constructor)的概念,它允许开发者将类的成员变量的初始化逻辑直接放在类的声明中,从而简化了构造函数的编写。本文将详细介绍主构造函数的工作原理、如何使用它进行对象初始化,以及相关的编程实践。主构造函数的基本概念在传统的C#类中,构造函数是一个与类同名的方法,它在...

在C#中,构造函数是一种特殊的方法,用于在创建对象时初始化对象的状态。从C# 9.0开始,引入了主构造函数(Primary Constructor)的概念,它允许开发者将类的成员变量的初始化逻辑直接放在类的声明中,从而简化了构造函数的编写。本文将详细介绍主构造函数的工作原理、如何使用它进行对象初始化,以及相关的编程实践。

主构造函数的基本概念
在传统的C#类中,构造函数是一个与类同名的方法,它在创建类的新实例时被调用。构造函数通常用于初始化对象的状态,包括成员变量的赋值和方法的调用。然而,这种方式在处理具有大量成员变量的类时可能会变得繁琐,因为需要在构造函数中为每个成员变量编写初始化代码。

C# 9.0引入的主构造函数解决了这个问题,它允许开发者直接在类的声明中指定成员变量的初始化逻辑。这样,构造函数就成为了一个简单的初始化入口,而不需要包含大量的初始化代码。

使用主构造函数
基本用法
下面是一个使用主构造函数的示例:
using System;

public class Person
{
public string Name { get; set; }
public int Age { get; set; }

public Person(string name, int age)
{
    Name = name;
    Age = age;
}

}

class Program
{
static void Main()
{
var person = new Person(“Alice”, 30);
Console.WriteLine($“Name: {person.Name}, Age: {person.Age}”);
}
}
在这个示例中,我们定义了一个Person类,并在构造函数中初始化了Name和Age属性。这是一种传统的构造函数使用方式。

现在,我们使用主构造函数来重写这个类:
using System;

public class Person(string name, int age)
{
public string Name { get; } = name;
public int Age { get; } = age;
}

class Program
{
static void Main()
{
var person = new Person(“Alice”, 30);
Console.WriteLine($“Name: {person.Name}, Age: {person.Age}”);
}
}
在这个示例中,我们直接在类的声明中初始化了Name和Age属性。这就是主构造函数的基本用法。

主构造函数与只读成员
主构造函数的一个常见用途是初始化只读成员(即只具有get访问器的属性)。这是因为只读成员必须在声明时初始化,或者在构造函数中初始化。
using System;

public class Person
{
public string Name { get; } = “Default Name”;
public int Age { get; } = 0;

public Person(string name, int age)
{
    Name = name;
    Age = age;
}

}

class Program
{
static void Main()
{
var person = new Person(“Alice”, 30);
Console.WriteLine($“Name: {person.Name}, Age: {person.Age}”);
}
}
在这个示例中,我们使用主构造函数初始化了Name和Age属性,并将它们设置为只读属性。

主构造函数与参数属性
C# 9.0还引入了参数属性(Parameter Properties)的概念,它允许我们在类的声明中直接定义属性,并将它们与构造函数参数关联。
using System;

public class Person(string name, int age)
{
public string Name { get; } = name;
public int Age { get; } = age;
}

class Program
{
static void Main()
{
var person = new Person(“Alice”, 30);
Console.WriteLine($“Name: {person.Name}, Age: {person.Age}”);
}
}
在这个示例中,我们定义了一个Person类,并使用参数属性来初始化Name和Age属性。

主构造函数的设计考虑
使用主构造函数时,需要考虑以下几个设计方面:

不可变性:主构造函数通常用于初始化不可变成员。这是因为一旦对象被创建,其状态就不应该改变。
数据封装:主构造函数有助于保持数据的封装性,因为它将初始化逻辑集中在类的声明中。
代码简洁性:主构造函数可以使代码更加简洁,因为它减少了构造函数中的重复代码。
性能:主构造函数可能会影响性能,因为它需要在类的声明中进行额外的初始化工作。然而,对于大多数应用来说,这种性能影响是可以接受的。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。