3.1 为什么要使用变量
变量关系到数据的存储,首先需要根据数据的需求(即类型)为它申请一块合适的空间,然后在这个空间中存储相应的值。在内存中为数据分配一定空间之后,乳沟要使用定义的这个数据,由于内存中的数据是以二进制格式进行存储的,而这些二进制数据都对应相应的内存地址。因此,必须通过一种技术使用户能够方便的访问到二进制数据的内纯地址这就是变量
3.2 变量是什么
变量是用来存储特定类型的数据
3.3 变量的声明及初始化
- 变量声明
语法如下
变量类型 变量名;
2.变量的命名规则
变量的命名规则:
1.变量只能由数字,字母和下划线组成
2.变量名的第一个字符只能是字母或下划线,不能是数字
3.不能使用C#中的关键字作为变量名
4.一旦在一个语句块中定义一个变量名,那么在变量的作用域内都不能再定义同名的变量
3.3.2 简单数据类型
数据类型可以分为两种一种是值类型,另一种是引用类型
值类型包括简单类型和复合类型
简单类型是程序中使用的最基本类型,主要包括整数类型,浮点类型,布尔类型,字符类型等4种,这四种简单类型都是.NET中预先定义的
复合类型是枚举类型和结构类型
整数类型
- 十进制:十进制的表现形式就是我们在日常生活中使用的数据,如120,0,-127
- 八进制:以0开头,如0123(转换成十进制为83),-0123(转换为-83)注意:八进制必须以0开头
- 十六进制以0X或0x开头的数,如0x25(转换成37),0Xb01e(转换成十进制为45086)注意:十六进制必须以0X或0x开头
C#内置的整形类型
类型 | 说明(8位等于1字节) | 范围 |
---|---|---|
sbyte | 8位有符号整数 | -127~128 |
short | 16位有符号数 | -32768-32767 |
int | 32位有符号数 | -2147483648-2147483647 |
long | 64位有符号数 | |
byte | 8位无符号数 | 0-255 |
ushort | 16位无符号数 | 0-65535 |
uint | 32位无符号数 | |
ulong | 64位无符号整数 |
浮点类型
类型 | 说明 | 范围 |
---|---|---|
float | 精确到7位数 | |
double | 精确到15~16位数 |
float theMySum = 9.25f ;
float theMySum = 9.25F ;
double muDou = 0 ;
double muDou =3445d ;
double muDou =23.323D ;
如果是没有后缀默认为double
decimal 类型
decimal 是一种精度跟高的浮点类型,其精度可以达到28位
(由于decimal类型的高精度特性,它更适合统一财务和货币计算)
如果希望一个小数被当成decimal类型,需要使用后缀m或者M
decimal myMoney = 1.12m ;
浮点型的转换只有float -> double 一种(自然转换)
以上都是属于数字类型
bool 类型
语法
bool x = true ;
字符类型
字符类型在C#表示,该类主要用来存储单个字符,它占用16位(两个字节)的存储空间,要以单引号(’’)
代码如下
Char ch1 = 'i';
Char ch2 = 'L';
string(s不大写)用双引号
Char 类的使用
Char的使用方法
方法 | 说明 |
---|---|
IsDigit | 指示某个Unicode字符是否属于十进制数字类别 |
IsLetter | 指示某个Unicode字符是否字母类别 |
IsLetterOrDigit | 指示某个Unicode字符是属于字母 |
IsLower | 指示某个Unicode字符是否属于小写字母 |
IsNumber | 指示某个Unicode字符是否属于数字类别 |
IsPunctuation | 指示某个Unicode字符是否属于标点符号类别 |
IsSeparator | 指示某个Unicode字符是否属于分隔符类别 |
IsUpper | 指示某个Unicode字符是否符合大写字母类别 |
IsWhiteSpace | 指示某个Unicode字符是否属于空白类别 |
Parse | 将指定字符串的值装换为它的 |
ToLower | 将Unicode字符的值转换为它的小写 |
ToString | 将字符转换为其等效的字符串表示 |
ToUpper | 将Unicode字符的值转换为它的大写等效项 |
TryParse | 将字符串的值转换为它的等效Unicode字符 |
null 空类型
数字,bool类型不能为null
转义字符(’’)
如果在C#中使用 ''反斜杠就要做如下
char ch ='\\'
转义字符(单个反斜杠)只针对后面紧跟着的单个字符进行操作
转义字符如下
转义字符 | 说明 |
---|---|
\n | 回车换行 |
\t | 横向跳到下一制表位置 |
" | 双引号 |
\b | 退格(就是键盘上的<——) |
\r | 回车(回到这行代码的最左面,并且会替代后面的文本) |
\f | 换页 |
\\ | 反斜杠 |
\’ | 单引号 |
\uxxxx | 4位十六进制所表示的字符,如\u0053 |
3.3.3 变量的初始化
1.单独初始化变量
使用赋值运算符 “=”(等号)对变量进行初始化,即将等号右边的值赋值给左边的变量
int sum ;
sum =2017;
等号右边也可以是一个已经被赋值的变量
2.声明初始量
声明变量的时候对变量进行初始化,即在每个变量名后面加上给变量赋初始值
int mr = 927 ;
3.同时初始化多个变量
对多个区同类型的变量福同一个值时,为了节省代码行数,可以同时对多个变量进行初始化
int a ,b,c,d,e ;
3.3.4 变量的作用域
由于变量被定义后,只是暂时存储在内存中,等程序执行到某一个点之后,该变量会被释放掉,也就是说变量有它的周期。因此,变量的作用域是指程序代码能够访问该变量的区域,如果超出该区域,则编译时会出现错误。在程序中,一般会根据变量的“有效范围”将变量分成 “成员变量”和“局部变量”
成员变量
在类体重中定义的变量被称为成员变量,成员变量在整个类中都有效。类的成员变量又可以两种:静态变量和实例变量
class Text
{
int x =45 ;//动态变量
static int y = 90 ;//静态变量
}
静态变量的有效范围可以跨类,甚至可达到整个应用程序之内。对于静态变量,除了能在定义它的类内存取,还能直接以 “类名.静态变量”的方式在其他的类内使用
局部变量
在类的方法体中定义的变量(定义方法”{“与”}“之间的区域)称为局部变量,局部变量只在当前代码块中有效
在类的方法中声明的变量,包括方法的参数,都属于局部变量。局部变量只有在当前定义的方法内有效,不能用于类的其他方法中。局部变量的生命周期取决于方法,当方法被调用时,C#编译器为方法的局部变量分配内存空间,当该方法的调用结束后,则会释放方法中局部变量占用的内存空间,局部变量也将会销毁
3.4常量
常量是什么
常量就是程序运行过程中,值不能改变的量
常量分类
const常量
在C#中提到常量,通常指的是const常量。const常量也叫静态常量,它在编译时就已经确定了值,而且之后不能再进行更改。
const double PI = 3.1415;
const int MyInt=1;
Console.WriteLine(PI);
readonly 常量
readonly常量是一种特殊的常量,也称为动态常量,从字面理解上看,readonly常量可以进行动态赋值,但是注意的是,这里的动态赋值是有条件的,它只能在构造函数中进行赋值(注意是构造函数)
class Program
{
readonly int Price ;
Prohram()
{
Price = 368 ;
}
static void Main(string[] args)
{
}
}
如果要在构造函数以外的位置修改readonly常量的值,比如在Main方法中进行修改,代码如下
class Program
{
readonly int Price ;
Program()
{
Price = 368 ;
}
static void Main(string[] args)
{
Program.p = new Program();
p.Price = 365 ;
}
}
const 常量与readonly常量的区别
const常量与readonly常量的主要区别如下
- const常量必须在声明是初始化,而readonly常量则可以延迟到构造函数中初始化
- const常量在编译时就被解析,即将常量的值替换成了初始化的值,个人理解就是,赋的值立刻被赋值给const常量,而readonly常量的值需要在运行时确定
- const常量可以在类中或者方法体中定义,而readonly常量只能在类中定义