序号 | 系列文章 |
---|---|
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# 程序中变量与常量的使用,希望能够对大家有所帮助。望大家多多支持,你们的支持就是笔者创作最大的动力!