|
C# 变量 一个变量只不过是一个供程序操作的存储区的名字。 在 C# 中,变量是用于存储和表示数据的标识符,在声明变量时,您需要指定变量的类型,并且可以选择性地为其分配一个初始值。 在 C# 中,每个变量都有一个特定的类型,类型决定了变量的内存大小和布局,范围内的值可以存储在内存中,可以对变量进行一系列操作。 我们已经讨论了各种数据类型。C# 中提供的基本的值类型大致可以分为以下几类: 类型 | 举例 | | 整数类型 | sbyte、byte、short、ushort、int、uint、long、ulong 和 char | | 浮点型 | float, double | | 十进制类型 | decimal | | 布尔类型 | true 或 false 值,指定的值 | | 空字符串 | string | | 空类型 | 可为空值的数据类型 |
C# 允许定义其他值类型的变量,比如 enum,也允许定义引用类型变量,比如 class。这些我们将在以后的章节中进行讨论。在本章节中,我们只研究基本变量类型。
C# 4.0引入了动态类型 (dynamic),它允许在运行时推断变量的类型。这在一些特殊情况下很有用,但通常最好使用静态类型以获得更好的性能和编译时类型检查。 dynamic dynamicVariable = "This can be any type";C# 中的变量定义C# 中变量定义的语法: <data_type> <variable_list>;在这里,data_type 必须是一个有效的 C# 数据类型,可以是 char、int、float、double 或其他用户自定义的数据类型。variable_list 可以由一个或多个用逗号分隔的标识符名称组成。 一些有效的变量定义如下所示: int i, j, k;char c, ch;float f, salary;double d;您可以在变量定义时进行初始化: int i = 100;变量的命名规则在 C# 中,变量的命名需要遵循一些规则: - 变量名可以包含字母、数字和下划线。
- 变量名必须以字母或下划线开头。
- 变量名区分大小写。
- 避免使用 C# 的关键字作为变量名。
int myVariable = 10;string _userName = "John";C# 中的变量初始化变量通过在等号后跟一个常量表达式进行初始化(赋值)。初始化的一般形式为: variable_name = value;变量可以在声明时被初始化(指定一个初始值)。初始化由一个等号后跟一个常量表达式组成,如下所示: <data_type> <variable_name> = value;一些实例: int d = 3, f = 5; /* 初始化 d 和 f. */byte z = 22; /* 初始化 z. */double pi = 3.14159; /* 声明 pi 的近似值 */char x = 'x'; /* 变量 x 的值为 'x' */正确地初始化变量是一个良好的编程习惯,否则有时程序会产生意想不到的结果。 请看下面的实例,使用了各种类型的变量: 实例using System;
namespace VariableDefinition
{
class Program
{
static void Main(string[ args)
{
short a;
int b ;
double c;
/* 实际初始化 */
a = 10;
b = 20;
c = a + b;
Console.WriteLine("a = {0}, b = {1}, c = {2}", a, b, c);
Console.ReadLine();
}
}
}
当上面的代码被编译和执行时,它会产生下列结果: a = 10, b = 20, c = 30接受来自用户的值System 命名空间中的 Console 类提供了一个函数 ReadLine(),用于接收来自用户的输入,并把它存储到一个变量中。
例如: int num;num = Convert.ToInt32(Console.ReadLine());函数 Convert.ToInt32() 把用户输入的数据转换为 int 数据类型,因为 Console.ReadLine() 只接受字符串格式的数据。 C# 中的 Lvalues 和 RvaluesC# 中的两种表达式: 变量是 lvalue 的,所以可以出现在赋值语句的左边。数值是 rvalue 的,因此不能被赋值,不能出现在赋值语句的左边。下面是一个有效的语句: int g = 20;下面是一个无效的语句,会产生编译时错误: 10 = 20;
C# 变量作用域在 C# 中,变量的作用域定义了变量的可见性和生命周期。 变量的作用域通常由花括号 {} 定义的代码块来确定。 以下是关于C#变量作用域的一些基本规则: 局部变量在方法、循环、条件语句等代码块内声明的变量是局部变量,它们只在声明它们的代码块中可见。 实例void MyMethod()
{
int localVar = 10; // 局部变量
// ...
}
// localVar 在这里不可见
块级作用域在 C# 7及更高版本中,引入了块级作用域,即使用大括号 {} 创建的任何块都可以定义变量的作用域。 实例{
int blockVar = 20; // 块级作用域
// ...
}
// blockVar 在这里不可见
方法参数作用域方法的参数也有其自己的作用域,它们在整个方法中都是可见的。 实例void MyMethod(int parameter)
{
// parameter 在整个方法中可见
// ...
}
全局变量在类的成员级别定义的变量是成员变量,它们在整个类中可见,如果在命名空间级别定义,那么它们在整个命名空间中可见。 实例class MyClass
{
int memberVar = 30; // 成员变量,在整个类中可见
}
静态变量作用域静态变量是在类级别上声明的,但它们的作用域也受限于其定义的类。 实例class MyClass
{
static int staticVar = 40; // 静态变量,在整个类中可见
}
循环变量作用域在 for 循环中声明的循环变量在循环体内可见 。 实例for (int i = 0; i < 5; i++)
{
// i 在循环体内可见
}
// i 在这里不可见
总体而言,变量的作用域有助于管理变量的可见性和生命周期,确保变量在其有效范围内使用,也有助于防止命名冲突。
C# 常量常量是固定值,程序执行期间不会改变。常量可以是任何基本数据类型,比如整数常量、浮点常量、字符常量或者字符串常量,还有枚举常量。 常量可以被当作常规的变量,只是它们的值在定义后不能被修改。
整数常量整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,没有前缀则表示十进制。 整数常量也可以有后缀,可以是 U 和 L 的组合,其中,U 和 L 分别表示 unsigned 和 long。后缀可以是大写或者小写,多个后缀以任意顺序进行组合。 这里有一些整数常量的实例: 212 /* 合法 */215u /* 合法 */0xFeeL /* 合法 */078 /* 非法:8 不是一个八进制数字 */032UU /* 非法:不能重复后缀 */以下是各种类型的整数常量的实例: 85 /* 十进制 */0213 /* 八进制 */0x4b /* 十六进制 */30 /* int */30u /* 无符号 int */30l /* long */30ul /* 无符号 long */浮点常量一个浮点常量是由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。 这里有一些浮点常量的实例: 3.14159 /* 合法 */314159E-5L /* 合法 */510E /* 非法:不完全指数 */210f /* 非法:没有小数或指数 */.e55 /* 非法:缺少整数或小数 */使用浮点形式表示时,必须包含小数点、指数或同时包含两者。使用指数形式表示时,必须包含整数部分、小数部分或同时包含两者。有符号的指数是用 e 或 E 表示的。 字符常量字符常量是括在单引号里,例如,'x',且可存储在一个简单的字符类型变量中。一个字符常量可以是一个普通字符(例如 'x')、一个转义序列(例如 '\t')或者一个通用字符(例如 '\u02C0')。 在 C# 中有一些特定的字符,当它们的前面带有反斜杠时有特殊的意义,可用于表示换行符(\n)或制表符 tab(\t)。在这里,列出一些转义序列码: 转义序列 | 含义 | | \\ | \ 字符 | | \' | ' 字符 | | \" | " 字符 | | \? | ? 字符 | | \a | Alert 或 bell | | \b | 退格键(Backspace) | | \f | 换页符(Form feed) | | \n | 换行符(Newline) | | \r | 回车 | | \t | 水平制表符 tab | | \v | 垂直制表符 tab | | \ooo | 一到三位的八进制数 | | \xhh . . . | 一个或多个数字的十六进制数 |
以下是一些转义序列字符的实例: namespace EscapeChar{ class Program { static void Main(string[] args) { Console.WriteLine("Hello\tWorld\n\n"); Console.ReadLine(); } }}当上面的代码被编译和执行时,它会产生下列结果: Hello World字符串常量字符串常量是括在双引号 "" 里,或者是括在 @"" 里。字符串常量包含的字符与字符常量相似,可以是:普通字符、转义序列和通用字符 使用字符串常量时,可以把一个很长的行拆成多个行,可以使用空格分隔各个部分。 这里是一些字符串常量的实例。下面所列的各种形式表示相同的字符串。 string a = "hello, world"; // hello, worldstring b = @"hello, world"; // hello, worldstring c = "hello \t world"; // hello worldstring d = @"hello \t world"; // hello \t worldstring e = "Joe said \"Hello\" to me"; // Joe said "Hello" to mestring f = @"Joe said ""Hello"" to me"; // Joe said "Hello" to mestring g = "\\\\server\\share\\file.txt"; // \\server\share\file.txtstring h = @"\\server\share\file.txt"; // \\server\share\file.txtstring i = "one\r\ntwo\r\nthree";string j = @"onetwothree";定义常量常量是使用 const 关键字来定义的 。定义一个常量的语法如下: const <data_type> <constant_name> = value;下面的代码演示了如何在程序中定义和使用常量: 实例using System;
public class ConstTest
{
class SampleClass
{
public int x;
public int y;
public const int c1 = 5;
public const int c2 = c1 + 5;
public SampleClass(int p1, int p2)
{
x = p1;
y = p2;
}
}
static void Main()
{
SampleClass mC = new SampleClass(11, 22);
Console.WriteLine("x = {0}, y = {1}", mC.x, mC.y);
Console.WriteLine("c1 = {0}, c2 = {1}",
SampleClass.c1, SampleClass.c2);
}
}
当上面的代码被编译和执行时,它会产生下列结果: x = 11, y = 22c1 = 5, c2 = 10
|