【C#基础】C# 变量与常量的使用

简介: 编程语言 C# 变量和常量的介绍。
序号 系列文章
1 【C#基础】C# 程序通用结构
2 【C#基础】C# 基础语法解析
3 【C#基础】C# 数据类型总结

前言

:smile:大家好,我是writer桑,前面一章已经学习了 C# 的数据类型,那本章就开始学习C# 程序中变量与常量的使用,希望看完大家能够有所收获,感谢支持!

一. 变量(variable)

变量用来存储信息,而变量名就是一个供程序操作存储区的名字。每个变量都有一个特定的类型,类型决定了变量内存的大小和布局, 变量的值存储在内存中,在允许的范围内可以对变量进行一系列的操作。

1,变量定义及初始化

C# 变量定义的语法: <data_type> <variable_name>;
  • data_type 也即变量的类型,这里必须是一个合法的 C# 数据类型
  • variable_name 表示变量名称,通过赋值将数据和可描述的变量名连接起来,同时变量的声明必须是有效的 C# 标识符

一些有效的变量定义示例代码:

// 整数、字符、浮点数、字符串类型的定义; 
int i, j, k;    
char c, ch;     
float f, salary;    
string s;
变量初始化赋值语法: <data_type> <variable_name> = value;
  • 其中 value 表示常量表达式,使用等号将初始值和变量名连接
  • 对于在获取变量的值之前,都需要对该变量进行明确赋值,输出未赋值的变量时编译器会报错误。
  • 变量在定义时分为初始赋值或者初始未赋值,笔者建议声明变量时进行赋值,详细的理由请查看第12条建议

我们可以在变量定义时进行初始化:

// 定义变量并初始化 
int i = 11; 
char c = 'A';
float f = 1.1f;
string s = "hello,world"; 

2,变量的类别

C # 定义了七种类型的变量:静态变量、实例变量、数组元素、值参数、引用参数、输出参数和局部变量。 下面分别介绍其中每个类别。

代码理解:

class Example
{
    public static int x;
    int y;

    void ExampleMethod(int[] v, int a, ref int b, out int c)
    {
        int i = 1;
        c = a + b++;
    }
}
x 是静态变量, y 是实例变量, v[0] 是数组元素,a 是值参数, b 是引用参数,c 是输出参数, i 是局部变量。

静态变量:

在 C# 程序中使用 static 关键字声明的字段为 静态变量,静态变量它不需要实例化对象来引用,可以直接使用类名来引用。静态变量的默认值是变量类型的默认值0, 同时静态变量随着所属应用程序的结束而停止存在。

实例变量:

没有用 static 关键字声明的字段为 实例变量,与静态变量不同的是实例变量它必须创建类对象才可以通过对象来引用变量。同时实例变量的初始值为变量类型的默认值0。

数组元素:

一组具有同一属性的数据就称为 数组,是最常见的数据结构之一。当创建数组实例时,数组的元素就已存在, 数组元素初始值都是默认值0。在没有对该数组实例的引用时停止存在;

值参数:

没有使用 ref 或 out 关键字修饰的参数为 值参数, 值参数所属的函数成员 (方法、实例构造函数、访问器或运算符) 或匿名函数在开始调用时而存在并进行初始化值,当函数成员或匿名函数返回时值参数就停止存在。

引用参数:

使用修饰符 ref 声明的参数为 引用参数,引用参数不会创建新的存储空间,相反,引用参数与所属函数成员或匿名函数调用中的参数的变量表示 相同的存储位置。

输出参数:

使用修饰符 out 声明的参数为 输出参数, 同样输出参数不会创建新的存储空间, 相反,输出参数与函数成员或委托调用中的参数有着相同存储位置。 因此,输出参数的值始终与基础变量相同。

局部变量:

顾名思义局部变量就是只在局部的“代码块”内有效的变量,局部变量经常出现在 for 语句、if 语句或 using 语句等等。局部变量的生存期是程序执行的一部分,实际生存期取决于程序的具体实现。

3,接收输出变量

在 C# 程序中可以使用 System 命名空间中 Console 类的 Readline 方法 和 WriteLine 方法实现接收变量并输出。
  • Readline 方法用于接收用户输入的一行数据并转换为 string 字符串类型输出
  • WriteLine 方法将指定的 value 参数变量输出

以下面程序的实现为示例:

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("请问您喜欢什么编程语言?");
        string language = Console.ReadLine();
        Console.WriteLine($"我也喜欢用{language}");    // 我也喜欢用C#
        Console.ReadKey();
    }
}

二. 常量(constant)

常量是不可变的值,在编译时是已知的,在程序的生命周期内不会改变。 常量使用 const 修饰符声明。 仅 C# 内置类型(不包括 System.Object)可声明为 const。 用户定义的类型(包括类、结构和数组)不能为 const。 同时也可以使用 readonly 修饰符创建在运行时一次性(例如在构造函数中)初始化的类、结构或数组,此后不能更改。

1,常量的定义及初始化

常量定义的语法: const <data_type> <constant_name> = value;readonly <data_type> <constant_name> = value;
  • 与变量不同,常量在声明时必须初始化赋值
  • data_type 表示数据类型,constant_name 表示常量名称, value 表示常量表达式
  • C# 程序中常量分为编译期的常量 const 和运行期的常量 readonly
  • 笔者建议优先考虑 readonly 关键字来声明常量,详细的理由请查看第2条建议

如何在 C# 中定义常量示例程序:

static class Constants
{
    public const double Pi = 3.14159;
    public const int SpeedOfLight = 300000; 
}

class Program
{
    static void Main()
    {
        double radius = 5.3;
        double area = Constants.Pi * (radius * radius);
        int secsFromSun = 149476000 / Constants.SpeedOfLight; 
        Console.WriteLine(secsFromSun);        // 498
    }
} 
  • 通常使用常量为特殊值且提供有意义的名称, 比如 Pi 和 SpeedOfLight 等常量。
  • 常量的输出与变量相同, 使用 Console 类的 WriteLine 方法。
  • 使用类名限定符 (示例代码的 static) 有助于确保你和使用该常量的其他人了解它是常量,并且不能通过实例化对象来修改。 (提高可读性)

2,常见的常量类型

整数常量:

整数常量可以是十进制、二进制、八进制或十六进制的常量, 其中前缀的使用:

  • 十进制:不使用任何前缀(可以使用U 和 L 分别表示 unsigned 和 long)
  • 二进制:使用 0b 或 0B 前缀
  • 八进制: 使用 0 前缀
  • 十六进制:使用 0x 或 0X 前缀

四种进制的代码示例:

const int decimalLiteral = 42;    // 十进制
const int binaryLiteral = 0b_0010_1010;   // 二进制
const int octalLiteral = 0213;    // 八进制
const int hexLiteral = 0x2A;      // 十六进制  

浮点数常量:

使用 浮点数常量必须包含小数点、指数或同时包含两者。使用指数形式必须包含整数部分、小数部分或同时包含两者。有符号的指数是用 e 或 E 表示的。 浮点常量通常用来表示时间、日期等需要精确到小数点后几位的结果,且结果不能修改。

一些浮点常量的实例:

const float time = 11.11f;    
const float price = 9.99f;    
const double data = 11.11;    
const double pi = 3.1415926;

字符常量:

字符常量是指用一对单引号括起来的一个字符,如'a','9',字符常量中的单引号只起定界作用并不表示字符本身。 在 C# 程序中字符常量的主要表示有普通字符 'b'、转义序列 '\t'、通用字符 '\u02C0'。

列举C# 中字符串转义序列:

转义序列 字符名称 Unicode 编码
\' 单引号 0x0027
\" 双引号 0x0022
\\ 反斜杠 0x005C
\0 null 0x0000
\a 警报 0x0007
\b Backspace 0x0008
\f 换页 0x000C
\n 换行 0x000A
\r 回车 0x000D
\t 水平制表符 0x0009
\v 垂直制表符 0x000B
\u Unicode 转义序列 (UTF-16) \uHHHH(范围:0000 - FFFF;示例:\u00E7 =“ç”)
\U Unicode 转义序列 (UTF-32) \U00HHHHHH(范围:000000 - 10FFFF;示例:\U0001F47D = "👽")
\x 除长度可变外,Unicode 转义序列与“\u”类似 \xHH[H](范围:0 - FFFF;示例:\x00E7、\x0E7 或 \xE7 =“ç”

使用字符常量转义序列的示例

class Program
{
    static void Main()
    {
        Console.WriteLine("Hello,\t\n world");
        Console.ReadLine();
    }
} 

字符串常量:

字符串常量是一对双引号括起来的字符序列,与字符常量不同的地方在于表达形式、含义和内存。字符串常量的声明是括在双引号“”里,或者使用@“” 表示取消字符串中的转义符 。字符串常量常用于用户程序输入信息、 程序向用户显示信息等。

各种形式的字符串常量实现:

const string str0 = "hello, C#";                  // hello, C#
const string str1 = @"hello, C#";               // hello, C#
const string str2 = "hello \t C#";               // hello     C#
const string str3 = @"hello \t C#";               // hello \t C#
const string str4 = "Joe said \"Hello\" to me";      // Joe said "Hello" to me
const string str5 = @"Joe said ""Hello"" to me";   // Joe said "Hello" to me
const string str6 = "\\\\server\\share\\file.txt";   // \\server\share\file.txt
const string str7 = @"\\server\share\file.txt";      // \\server\share\file.txt
const string str8 = "one\r\ntwo\r\nthree";
const string str9 = @"one
                   two
                   three";
  • 即使表达形式不同,但是表示的都是相同的字符串常量
  • 声明字符串时可以使用换行和空格

结语

:heavy_check_mark: 以上就是对 C# 程序中变量与常量的使用,希望能够对大家有所帮助。望大家多多支持,你们的支持就是笔者创作最大的动力!
目录
相关文章
|
7月前
|
存储 安全 数据库连接
C#深度揭秘:常量的魅力和实践,一文让你从新手到专家
C#深度揭秘:常量的魅力和实践,一文让你从新手到专家
56 0
|
7月前
|
C# 开发者
C# 10.0引入常量插值字符串:编译时确定性的新篇章
【1月更文挑战第22天】在C# 10.0中,微软为开发者带来了一项引人注目的新特性——常量插值字符串。这一功能允许在编译时处理和计算字符串插值表达式,从而得到可以在编译时确定的常量字符串。本文将深入探讨C# 10.0中常量插值字符串的概念、工作原理、使用场景及其对现有字符串处理方式的改进,旨在帮助读者更好地理解和应用这一强大的新特性。
|
3月前
|
存储 C# 索引
C# 一分钟浅谈:变量与数据类型简介
【9月更文挑战第1天】在 C# 编程中,了解变量与数据类型至关重要。本文详细介绍了 C# 中的值类型(如整数、浮点数、布尔值等)和引用类型(如类、接口、数组、字符串)。通过示例代码展示了变量的声明与使用方法,并针对数据类型转换错误、变量未初始化及数值溢出等常见问题提供了解决方案。正确选择数据类型不仅能提升程序性能,还可避免潜在错误,有助于编写高质量代码。
136 47
|
4月前
|
传感器 开发框架 JSON
聊聊 C# dynamic 类型,并分享一个将 dynamic 类型变量转为其它类型的技巧和实例
聊聊 C# dynamic 类型,并分享一个将 dynamic 类型变量转为其它类型的技巧和实例
206 0
|
6月前
|
开发框架 .NET 编译器
程序与技术分享:C#基础知识梳理系列三:C#类成员:常量、字段、属性
程序与技术分享:C#基础知识梳理系列三:C#类成员:常量、字段、属性
42 2
|
6月前
|
存储 C# 开发者
C# 编程基础:注释、变量、常量、数据类型和自定义类型
C# 编程基础:注释、变量、常量、数据类型和自定义类型
|
6月前
|
存储 Java 编译器
C# 变量与参数详解
C# 变量与参数详解
|
6月前
|
开发框架 .NET 程序员
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
34 0
|
7月前
|
存储 C# 开发工具
22.C# 中使用变量记录玩家创建的角色名:实现与游戏角色的互动
22.C# 中使用变量记录玩家创建的角色名:实现与游戏角色的互动
75 0
|
7月前
|
程序员 编译器 C#
C#变量命名规则
C#变量命名规则
86 0