在 C# 中声明和初始化变量

发布日期:2026-07-14 02:20:03   来源 : 杭州电子商务研究院    浏览量 :19
杭州电子商务研究院 发布日期:2026-07-14 02:20:03  
19

介绍

变量的声明和初始化是理解任何语言的基础。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初始化为其默认值nulldefault以解决此问题。

      static void Main(string[] args)
{
    string a = null;
    Console.WriteLine(a);
}
    

局部变量的最大作用域是包含它们的方法。这意味着方法之外的代码不能使用该声明。有关变量作用域的更多信息,请参阅本文

字段

字段是属于类型的成员变量。可以使用修饰符(例如publicprivate)指定字段以指定访问权限。静态字段在应用程序的整个生命周期内只有一个实例。类型为实例化类型的每个非静态字段声明一个变量实例。与局部变量不同,字段需要显式类型声明,因此代码不能使用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 等语言区分开来。开发人员应注意值类型和引用类型之间的差异。他们应该决定何时使用显式类型与隐式类型,并在适当的情况下使用对象和集合初始化器。

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据