在 C# 中声明和初始化变量
介绍
变量的声明和初始化是理解任何语言的基础。C# 是一种类型安全的语言,这意味着 C# 中的所有变量和常量都必须具有类型,并且声明的类型是不可变的。在 C# 中,类型是引用或值类型。有关这方面的更多信息,请参阅本文。
变量可以在声明时在同一个语句中初始化,也可以在代码的后面初始化。本文讨论了声明和初始化变量的不同方法,以及何时使用每种方法。
局部变量
局部变量是在代码块内声明的变量,通常是方法、属性或委托的一部分。声明指定类型,后跟名称,以及可选的初始化。初始化将变量设置为新实例。它必须是与声明类型兼容的类型。
static void Main(string[] args)
{
string a = "Hello World";
Console.WriteLine(a);
}
在上面的代码中,变量a被声明为字符串,并初始化为“Hello World”。下面的声明实现了完全相同的结果。
var a = "Hello World";
var关键字指定隐式类型。代码未指定类型,编译器可以从初始化中推断类型。编译器识别出双引号内的文字是字符串,并将变量声明为字符串。隐式类型变量不应与变体类型混淆。var维护C # 的类型安全机制,不允许在声明后更改类型。
当编译器推断的类型不明确时,显式类型变量可以增加代码的可读性。隐式类型变量更简洁,重构时需要的更改也更少。团队应该制定何时使用显式和隐式类型声明的指导原则。
代码必须在使用之前初始化局部变量。此代码会导致编译错误。
使用未分配的局部变量“a”
static void Main(string[] args)
{
string a;
Console.WriteLine(a);
}
将变量a初始化为其默认值null或default以解决此问题。
static void Main(string[] args)
{
string a = null;
Console.WriteLine(a);
}
局部变量的最大作用域是包含它们的方法。这意味着方法之外的代码不能使用该声明。有关变量作用域的更多信息,请参阅本文。
字段
字段是属于类型的成员变量。可以使用修饰符(例如public或private)指定字段以指定访问权限。静态字段在应用程序的整个生命周期内只有一个实例。类型为实例化类型的每个非静态字段声明一个变量实例。与局部变量不同,字段需要显式类型声明,因此代码不能使用var。当多个方法或属性需要使用变量时,应将局部变量转换为字段。
字段通常用于存储类型私有的数据,不通过公共接口公开。可以将字段声明为public,但这通常不被视为最佳实践。属性通常用于公开变量。
与局部变量不同,字段允许在使用代码初始化之前使用。此代码不会导致编译或运行时错误。
public class Messenger
{
private DateTime _currentDate;
public void SendMessage()
{
Console.WriteLine(_currentDate);
_currentDate = DateTime.Now.Date;
Console.WriteLine(_currentDate);
}
}
输出:
0001 年 1 月 1 日 上午 12:00:00
2019 年 11 月 23 日上午 12:00
请注意,currentDate默认为DateTime.MinValue。在第一次WriteLine调用之后,代码将其设置为一个新实例,该实例表示今天的当前日期。代码可以在声明旁边的构造之前初始化字段,如下所示。
public class Messenger
{
private DateTime _currentDate = DateTime.Now.Date;
}
对象初始值设定项和集合初始值设定项
对象初始化器提供了一种初始化类型成员变量的简便方法。考虑这个类。
public class Values
{
public string A { get; set; }
public string B { get; set; }
}
此代码创建了Values的一个实例并初始化两个属性。
class Program
{
static void Main(string[] args)
{
var values = new Values();
values.A = "A";
values.B = "B";
}
}
可以缩短如下:
class Program
{
static void Main(string[] args)
{
var values = new Values { A = "A", B = "B" };
}
}
这减少了代码的冗长程度并且通常使其更具可读性。
从可能引发异常的方法或属性初始化值时要小心谨慎。此代码中的values属性绝不会更改为null以外的引用。
class Program
{
static void Main(string[] args)
{
Values values = null;
try
{
values = new Values
{
A = ThrowException(),
B = "B"
};
}
catch
{
}
Console.WriteLine($"values is null {values == null}");
Console.ReadLine();
}
public static string ThrowException()
{
throw new Exception();
}
}
输出:
值为 null True
使用集合初始化器初始化集合和数组。此代码创建一个包含三个元素的整数列表。
static void Main(string[] args)
{
var numbers = new List<int> { 1, 2, 3 };
foreach (var number in numbers)
{
Console.WriteLine(number);
}
Console.ReadLine();
}
输出:
1
2
3
声明和初始化匿名类型
匿名类型是没有名称的类型。在代码块范围内声明它们。它们对于特定任务很有用,例如动态构建对象以序列化为 JSON 并将其发送到 RESTful 服务。
class Program
{
static void Main(string[] args)
{
var values = new { A = "A", B = "B" };
Console.WriteLine(values.A);
Console.WriteLine(values.B);
Console.ReadLine();
}
}
输出:
一个
乙
匿名类型是类型安全的。代码无法在声明后修改声明的成员。请谨慎使用匿名类型。C# 最适合使用显式类型命名,而匿名类型通常会让读者感到困惑。
结论
在 C# 中,变量始终具有类型。类型安全是该语言的基础,并将其与 JavaScript 等语言区分开来。开发人员应注意值类型和引用类型之间的差异。他们应该决定何时使用显式类型与隐式类型,并在适当的情况下使用对象和集合初始化器。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~