C# 中变量的自动默认值
介绍
静态类型语言(如 C#)要求开发人员事先声明变量,编译器会在编译时负责初始化。本指南将回答的问题是这些变量用什么初始化,以及使用不同类型时需要注意什么。我们还将深入研究自动属性,因为它们与变量关系较远,我们可能还会研究默认值。
变量类别
有三种不同类型的变量,它们会根据其类型自动使用默认值进行初始化。
- 静态变量
- 类实例的实例变量
- 数组元素
- 引用类型(又称指针)
除了引用类型使用null进行初始化之外,其余类型都使用其默认构造函数提供的值进行初始化。
默认值的初始化由内存管理器或垃圾收集器在后台完成,所有位都设置为零。对于int、float或string来说,所有设置为零的位都意味着不同的东西。
每种类型的默认值
- 任何引用类型:null
- 任何内置整数数字:0
- 任何内置浮点数:0
- 布尔值:false
- 字符:\0
- 枚举:表达式产生的值
- struct:所有值类型字段都设置为其默认值。
- 任何可空值类型:可空值类型的空值。
初始化
在 C# 7.1 版本之前,您可以使用默认运算符来初始化这样的变量。
int a = default(int);
在7.1版本之后,可以使用默认字面量来初始化变量。
int b = default;
让我们通过一个更复杂的例子来看一下这一点。
using System;
namespace Pluralsight
{
public class DefValues
{
public static void Main()
{
int a = default;
float b = default;
double c = default;
string d = default;
var e = new System.Collections.ArrayList();
Console.WriteLine($"The variable: {nameof(a)} has value: {a}");
Console.WriteLine($"The variable: {nameof(b)} has value: {b}");
Console.WriteLine($"The variable: {nameof(c)} has value: {c}");
Console.WriteLine($"The variable: {nameof(d)} has value: {d}");
Console.WriteLine($"The variable: {nameof(e)} has value: {e}");
Console.ReadKey();
}
}
}
该应用程序产生的输出如下。
The variable: a has value: 0
The variable: b has value: 0
The variable: c has value: 0
The variable: d has value:
The variable: e has value: System.Collections.ArrayList
nameof可用于获取特定变量、类、结构等的名称。
另一个例子是C# 中的自动属性。当您使用属性来描述类的内部状态时,重要的是要把事情做好。我们可以通过使用默认值初始化属性来做到这一点。此功能包含在 C# 6.0 版本中。
using System;
namespace Pluralsight
{
public class DefValuesAutoProp
{
public string Name { get; set; } = default;
public string Age { get; set; } = default;
public DateTime Date {get;set; } = DateTime.Now;
public static void Main()
{
DefValuesAutoProp a = new DefValuesAutoProp();
Console.WriteLine($"The instance of {nameof(DefValuesAutoProp)} called {nameof(a)} has properties Name: {a.Name} and Age: {a.Age}");
Console.ReadKey();
}
}
}
产生的输出如下。
The instance of DefValuesAutoProp called a has properties Name: and Age: and Date: 2/17/2020 11:48:05 AM
您甚至可以为只读自动属性设置默认值。
结论
在本指南中,我们学习了如何利用 C# 的默认值分配功能。我们还看到,类属性也可以使用此功能进行初始化。我希望本指南对您有所帮助,并感谢您阅读它。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~