C# 第二篇 基础语法
一、变量的声明及初始化
1、声明变量
声明变量就是指定变量的名称和类型,一个变量是由一个类型和跟在后面的一个或多个变量名组成,变量名用逗号分开;
变量类型 变量名; // 声明一个变量 int mr; 变量类型 变量名1,变量名2,...变量名n; // 同时声明多个变量 int mr_1,mr_2,mr_3;
2、简单的数据类型
2.1 整数类型
整数类型的数据在C#程序中有3种表现形式,分别为十进制、八进制和十六进制。整数无小数位,可为正负;
类型 | 说明 | 范围 |
sbyte | 8位有符号整数 | -128~127 |
short | 16位有符号整数 | -32768~32767 |
int | 32位有符号整数 | -2147483648~2147483647 |
long | 64位有符号整数 | -9223372036854775808~9223372036854775807 |
byte | 8位无符号整数 | 0~255 |
ushort | 16位无符号整数 | 0~65535 |
uint | 32位无符号整数 | 0~4294967295 |
ulong | 64位无符号整数 | 0~18446744073709551615 |
整数类型变量的默认值为0
2.2 浮点类型
浮点类型变量主要用于处理含有小数的数据;
类型 | 说明 | 范围 |
float | 精确到7位数 | -3.4X1038~3.4X1038 |
double | 精确到15或16位数 | -1.79X10308~1.79X10308 |
在需要使用float类型变量时,必须在后面跟f或F,否则编译器会强制将其作为double类型使用;可在double类型变量前使用(float)强制转换类型,浮点类型变量的默认值时0,而不是0.0;
2.3 decimal类型
decimal类型表示128位数据类型,它是一种精度更高的浮点类型,请精度可以达到28位,取值范围-7.9X1028~7.9X1028。
decimal类型适用于财务和货币计算,如果希望一个小数被当成decimal类型使用,需要使用后缀m或M。
2.4 布尔类型
布尔类型主要用来表示true值和false值,布尔变量关键字为:bool;
2.5 字符类型
字符类型在C#中使用Char类来表示,主要用于存储单个字符;
字符类型的值需要用单引号标识,例如:'a','b',"a"会被看为字符串;
Char有很多使用方法,如下表格为常用方法及说明:
方法 | 说明 |
IsDigit | 判断某个Unicode字符是否属于十进制数字类别 |
IsLetter | 判断某个Unicode字符是否属于字母类别 |
IsLetterOrDigit | 判断某个Unicode字符是属于字母类别还是十进制数字类别 |
IsLower | 判断某个Unicode字符是否属于小写字母类别 |
IsNumber | 判断某个Unicode字符是否属于数字类别 |
IsPunctuation | 判断某个Unicode字符是否属于标点符号类别 |
IsSeparator | 判断某个Unicode字符是否属于分隔符类别 |
IsUpper | 判断某个Unicode字符是否属于大写字母类别 |
IsWhiteSpace | 判断某个Unicode字符是否属于空白类别 |
Parse | 将指定的字符串的值转换为它的等效Unicode字符 |
ToLower | 将Unicode字符的值转换为它的小写等效值 |
ToString | 将字符的值转换为其等效的字符串 |
ToUpper | 将Unicode字符的值转换为它的大写等效项 |
TryParse | 将指定字符串的值转换为它的等效Unicode字符 |
使用方法 Char.IsLetter(变量名);
2.6 转义字符
转移字符是一种特殊的字符变量,以反斜线"\"开头,后跟一个或多个字符;
转义字符 | 作用 |
\n | 回车换行 |
\t | 横向跳到下一制表位置 |
\" | 双引号 |
\b | 退格 |
\r | 回车 |
\f | 换页 |
\\ | 反斜线符 |
\' | 单引号符 |
\uxxxx | 4位十六进制所表示的字符,如\u0052 |
转义字符"\"只针对后面紧跟着的单个字符进行操作;再输出系统目录,遇到反斜杠时,使用"\\"表示,如果有多级目录,会很麻烦,可以使用一个@符号进行多级转义,例如:
Console.WriteLine(@"C:\Windows\mm\cc\2022");
3、变量的初始化
变量的初始化实际上就是给变量赋值,以便在程序中使用。
3.1 单独初始化变量
int sum; sum = 2022;
3.2 声明时初始化变量
int sum = 2022; int sum = 2022,sum1 = 2023,sum2 = 2024;
3.3 同时初始化多个变量
int a,b,c,d; a = b = c = d = 0;
4、变量的作用域
变量被定义后,有一定的生命周期,变量的作用域是指程序代码能够访问该变量的区域,一般根据变量的有效范围分为成员变量和局部变量。
4.1 成员变量
在类体中定义的变量称为成员变量,在整个类中都有效。类的成员变量可分为静态变量和实例变量。
Class Text { int x =45; //实例变量 static int y = 90; //静态变量 }
静态变量的有效范围可以跨类,甚至可覆盖整个应用程序。除了可以存、取,还可以通过“类名。静态变量”在其他类内使用。
4.2 局部变量
在类的方法体中定义的变量称为局部变量,局部变量只在当前代码块内有效。
5.常量
常量是在程序运行过程中,值不能改变的量。
5.1 常量的分类
常量主要有两种,分别是const常量和readonly常量,const常量也称为静态常量,他在编译时值就以确定。readonly常量是一种特殊的常量,也称为动态常量,可被动态赋值,赋值仅可在构造函数中赋值。
class program { readonly int price; //定义一个readonly常量 program() //构造函数 { price = 368; //在构造函数中修改readonly常量的值 } static void Main(string[] args) { ... } }
5.2 const常量与readonly常量的区别
const常量必须在声明时初始化,而readonly常量则可以在构造函数中初始化。
const在编译时初始化,readonly常量在运行时确认。
const常量可在类和方法中定义,readonly常量仅能在类中定义。
二、运算符
运算符是具有运算功能的符号,根据运算符的个数,可以分为单目运算符、双目运算符和三目运算符。
C#中唯一的三目运算符就是条件运算符(?:)
1、算术运算符
C#中的算术运算符是双目运算符,主要包括+、-、*、/和%五种,它们分别用于进行加、减、乘、除和求余运算。
2、自增运算符和自减运算符
自增运算符和自减运算符是单目运算符,在使用时有两种方式分别时++expr、--expr,或者expr++、expr-- 。第一种方式先自身计算在参与运算,后者反之。
3、赋值运算符
赋值运算符主要用来位变量等赋值,它是双目运算符。分为简单赋值运算符( = )和复合赋值运算符(+= 加赋值、 -= 减赋值 、/= 除赋值、*= 乘赋值、%= 求余赋值、&= 位与赋值、|= 位或赋值、>>= 右移赋值、<<= 左移赋值、^= 异或赋值)。
4、关系运算符
关系运算符是双目运算符,它用于程序中的变量之间及其他类型的对象之间的比较,返回结果为布尔值。成立true,不成立false。
> 大于、< 小于、== 等于、!= 不等于、>= 大于等于、<= 小于等于 。
5、逻辑运算符
逻辑运算符是对真和假这两个布尔值进行运算,运算后的结果仍是一个布尔值,逻辑运算符主要包括&&(&) 逻辑与、||(|) 逻辑或、!逻辑非。除了!是单目运算符,其他均为双目运算符。
6、位运算符
位运算符的操作类型是整型,可以是有符号的也可以是无符号的。C#中的位运算符有位与运算符(&)、位或运算符(|)、位异或运算符(^)、取反运算符(~)等。
7、移位运算符(了解即可)
C#中的移位运算符有两个,分别是左移位(<<)和右移位(>>)。
8、条件运算符
条件运算符用"?:"表示,它是C#中唯一的三目运算符,该运算符需要3个操作数,例如:
<表达式1>?<表达式2>:<表达式3>
在条件运算符中,表达式1是个布尔值,可为true或false,为真返回表达式2值,为假返回表达式3值。
条件运算符的结核性是从右向左的,即从右向左运算。
int x=5,y=6; int a=1,b=2; int z=0; z= x>y?x:a>b?a:b; //等价于 z= x>y?x:(a>b?a:b); //Z的值为 2
PS:运算符的优先级和结核性
C#运算符优先级由高到低的顺序依次是:
自增运算符和自减运算符>算术运算符>位移运算符>关系运算符>逻辑运算符>条件运算符>赋值运算符
三、数据类型的转换
数据类型转换式将一个值从一种数据类型更改为另一种数据类型的过程。大数据类型转换小数据类型,多余数据会丢弃。
1、隐式类型转换
隐式类型转换式不需要声明就能进行的转换。这些类型按低(精度)到高(精度)排列的顺序进行隐式转换。
byte < short < int < long < float < double
2、显示类型转换
在很多场合下不能进行隐式类型转换,否者会出现错误。一般出现高(精度)转换低(精度)。例如:
int i; i = (int)4.5;
3、使用Convert类进行转换
如以下情形:
long l = 3000000000; int i = (int)l;
以上转换因为int类型的最大值为2147483647,而3000000000比2147483647 大,所以显示转换会与预期结果不同,而是 -1294967296 ,程序并没有报错,所有右Convert类取提示。
Convert类的常用方法及说明如下:
方法 | 说明 |
ToBoolean | 将指定的值转换为等效的布尔值 |
ToByte | 将指定的值转换为8位无符号整数 |
ToChar | 将指定的值转换为Unicode字符 |
ToDateTime | 将指定的值转换为DateTime |
ToDecimal | 将指定的值转换为Decimal |
ToDouble | 将指定的值转换为双精度浮点数字 |
ToInt32 | 将指定的值转换为32位有符号整数 |
ToInt64 | 将指定的值转换为64位有符号整数 |
ToSByte | 将指定的值转换为8位有符号整数 |
ToSingle | 将指定的值转换为单精度浮点数字 |
ToString | 将指定的值转换为等效的String表示形式 |
ToUInt32 | 将指定的值转换为32位无符号整数 |
ToUInt64 | 将指定的值转换为64位无符号整数 |