C# 变量与常量

总目录


前言

在C#编程中, 常量(Constants)和变量(Variables)是基础但核心的概念。它们分别代表不可变和可变的数据存储方式,适用于不同的场景。


一、常量(Constants)

常量是程序运行期间不可修改的值,必须在声明时初始化。C#中定义常量有两种方式:const 和 readonly。

详情见:C# 中 readonly 与 const 的使用

二、变量(Variables)

  • 变量是存储信息的基本单位,其值在程序运行期间可以修改
  • 声明变量需指定类型或通过var推断类型,但不需要立即赋值(尽管通常会这样做)。
  • 变量是程序中用于存储数据的容器。它的值可以在程序运行过程中被修改。
  • 在 C# 中,变量是用于存储和表示数据的标识符,在声明变量时,您需要指定变量的类型,并且可以选择性地为其分配一个初始值。
  • 在 C# 中,每个变量都有一个特定的类型,类型决定了变量的内存大小和布局,范围内的值可以存储在内存中,可以对变量进行一系列操作。

1. 定义变量

变量的定义需要指定类型和变量名,语法如下:

类型 变量名;

例如:

int age;       // 定义一个整型变量
double price;  // 定义一个双精度浮点型变量
string name;   // 定义字符串一个变量

2. 初始化变量

变量可以在定义时直接初始化,也可以在后续代码中赋值:

  • 显式类型声明
      int age = 25;       // 定义并初始化一个整型变量
      double price = 99.99;  // 定义并初始化一个双精度浮点型变量
      string name = "Kimi";   // 定义并初始化一个字符串变量
    
  • 类型推断(var
    var score = 100;    // 编译为 int
    var list = new List<string>(); // 编译为 List<string>
    

3. 变量作用域

变量的作用域决定了它在程序中的可见性范围:

  • 局部变量:在方法、循环或代码块内声明,仅在其作用域内有效。

    void MyMethod()
    {
        int x = 10; // 局部变量
        if (x > 5)
        {
            int y = 20; // 仅在 if 块内有效
        }
    }
    
  • 类字段(成员变量):在类内部声明,作用域为整个类实例。

    • 实例变量:在类中定义,属于类的实例,通过对象访问。
    • 静态变量:在类中用static修饰,属于类本身,通过类名访问。
    public class MyClass
    {
        private int _count; // 实例变量
        public static int Total; // 静态变量
    }
    
  • 块级作用域
    在 C# 7及更高版本中,引入了块级作用域,即使用大括号 {} 创建的任何块都可以定义变量的作用域。

    {
    	int blockVar = 20; // 块级作用域
    	// ...
    }
    // blockVar 在这里不可见
    

4. 变量的存储位置

变量的存储位置取决于它的类型和定义方式:

  • 栈内存:局部变量通常存储在栈内存中。
  • 堆内存:引用类型(如string、object等)的实际数据存储在堆内存中,变量存储的是引用。

5. 变量生命周期

  • 局部变量:随方法调用创建,方法结束后销毁。
  • 实例变量:随对象实例化存在,对象被回收后释放。
  • 静态变量:随程序启动存在,程序结束时销毁。

6. 标识符与变量

  • 标识符 :是用来命名程序中的实体的符号,比如变量、方法、类等。它们是编程语言中用于识别各种元素的名字。
  • 变量:是一种特定类型的标识符,用来存储数据值。每个变量都有一个类型,决定了它可以存储的数据种类(例如整数、浮点数、字符串等),以及该变量占用的空间大小。
  • 关系
    • 标识符是一个更广泛的概念:它不仅包括变量,还包括方法名、类名、接口名等。换句话说,所有的变量名都是标识符,但并不是所有的标识符都是变量名。
    • 变量是具有特定类型的标识符:当定义一个变量时,你实际上是在创建一个特定类型的标识符,并为其分配内存空间来存储数据。
    • 作用不同:标识符主要用于提供名称以便引用程序中的各个部分;而变量则是具体的数据容器,其内容可以在程序执行过程中改变。

7. 变量的命名规则

变量的命名需要遵循一些规则:

  • 变量名可以包含字母、数字和下划线。
  • 变量名必须以字母或下划线开头。
  • 变量名区分大小写。
  • 避免使用 C# 的关键字作为变量名。

三、常量与变量的关键区别

特性常量变量
可变性值在定义后不能修改(不可变)值可以在程序运行过程中修改(可变)
初始化时间声明时(const)或构造函数(readonly可随时赋值
内存分配编译时确定,嵌入代码段运行时分配在栈或堆(取决于类型)
使用场景配置值、数学常量需要频繁修改的数据

以下是一个简单的C#代码示例,展示变量和常量的使用:

using System;

namespace VariableAndConstantExample
{
    class Program
    {
        // 类常量
        const double PI = 3.14159;

        // 静态只读字段
        static readonly DateTime AppStartTime = DateTime.Now;

        static void Main(string[] args)
        {
            // 局部变量
            int age = 25;
            string name = "jack";

            // 输出变量
            Console.WriteLine($"Name: {name}, Age: {age}");

            // 使用类常量
            double radius = 5.0;
            double area = PI * radius * radius;
            Console.WriteLine($"Area of circle: {area}");

            // 输出静态只读字段
            Console.WriteLine($"App started at: {AppStartTime}");

            // 修改变量
            age = 26;
            Console.WriteLine($"Updated Age: {age}");
        }
    }
}

四、使用建议

  1. 优先使用常量:如果数据不会改变(如数学常数、配置键),使用constreadonly
  2. 灵活选择类型
    • 简单且确定的值用const
    • 需运行时计算的复杂值用readonly
  3. 变量作用域最小化:避免全局变量,减少副作用。
  4. 命名规范:常量使用全大写(如MAX_SIZE),变量使用驼峰命名(如userName)。

五、常见问题

  1. const能否用于引用类型?
    可以,但仅限于stringnull(如const string Name = "John";)。

  2. readonly变量是否支持修改?
    只能在声明时或构造函数中赋值,其他位置修改会报错。

  3. var能否用于常量?
    不能,常量必须显式指定类型(如const int x = 10;)。


结语

回到目录页: C#/.NET 知识汇总
希望以上内容可以帮助到大家,如文中有不对之处,还请批评指正。


参考资料:
常量(C# 编程指南)
C# 文档 变量

### C# 字符变量常量的定义、区别及用法 #### 定义字符变量C# 中,字符变量用于存储单个字符。其数据类型为 `char`。字符变量可以通过以下方式定义: ```csharp char variableName; ``` 随后可以对其进行赋值操作。例如: ```csharp char myChar = 'A'; ``` 需要注意的是,在 C# 中,字符需要用单引号 `' '` 来表示[^1]。 #### 初始化字符变量 字符变量可以在声明的同时进行初始化,也可以分开执行声明和赋值操作。以下是两种常见的形式: - **声明并初始化**: ```csharp char letter = 'B'; // 同时声明和初始化 ``` - **先声明再赋值**: ```csharp char symbol; symbol = '#'; // 先声明后赋值 ``` #### 定义字符常量 如果需要定义一个不可更改的字符值,则可以使用关键字 `const` 创建常量常量的特点是在程序运行期间无法修改其值,并且通常建议将其名称设置为全大写字母以便于区分。例如: ```csharp const char CONSTANT_CHAR = '@'; ``` 这里展示了如何创建一个名为 `CONSTANT_CHAR` 的字符型常量,并赋予它固定不变的值 `'@'`[^2]。 #### 字符变量常量的区别 | 特性 | 变量 | 常量 | |-------------------|----------------------------------|-------------------------------| | 是否可变 | 是 | 否 | | 名字大小写约定 | 小驼峰命名法 (camelCase) | 大写 | | 使用场景 | 需要在程序中动态变化的数据 | 不会改变或者作为配置项使用的数值 | 另外值得注意的一点是,虽然两者都可以保存相同类型的值(即字符),但由于它们的本质差异——一个是固定的而另一个是可以随时更新的内容——所以在实际编码过程中应依据具体需求来决定采用哪种形式[^1][^2]。 #### 示例代码展示 下面提供一段简单的例子用来演示字符变量以及常量的实际运用情况: ```csharp using System; class Program { static void Main() { // 定义一个普通的字符变量 char normalVariable = 'X'; Console.WriteLine($"The value of the character variable is {normalVariable}"); // 修改该变量的值 normalVariable = 'Y'; Console.WriteLine($"After modification, it becomes {normalVariable}"); // 下面尝试定义一个字符常量 const char constantValue = '&'; Console.WriteLine($"\nThe unchangeable constant has been set to {constantValue}."); try{ // 这里会产生编译错误因为试图去改变一个已经被标记成const的东西 constantValue='Z'; }catch(Exception ex){ Console.WriteLine(ex.Message); } } } ``` 此段脚本首先建立了一个常规意义上的字母型别的局部成员叫做`normalVariable`, 并打印它的初始状态;接着再次指定新的内容给这个实体从而体现出了灵活性的一面。此同时我们也构建了一枚标志性的符号代表者恒定不变的概念—`constantValue`. 当试着重新分配其他任意值得时候就会触发异常机制提醒开发者注意违反原则的行为发生.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲤籽鲲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值