2 c#基础
2.1 第一个c#程序
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 //=========== 在c#中有两种常用注释方式============
7
8 //=========== 行注释的格式: //注释内容===========
9
10 //=========== 块注释的格式:/*注释内容*/ =========
11
12
13 namespace Study
14 {
15 /*
16 * C# 中每个语句都以分号结尾,语句可以写在多行,而不需要用续行符
17 * 用花括号将语名组合成块
18 * 区分大小写
19 */
20 class HelloCs //声明一个类
21 {
22 static void Main(string[] args) //主方法,程序入口点
23 {
24
25 Console.WriteLine("Hello ,my name is mozer,i am a C# beginner");
26 Console.ReadLine();
27 return;
28 }
29 }
30 }
31
2 .2 变量
2.2.1 声明变量:
datetype identifier; 例如 int i; 还可以在一行中声明多个类型相同的变量,int x,y,z;
2.2 .2变量初始化
要使用变量,就必须在使用前初始化变量。C#有两种方法可以保证 变量在使用进行了初始化:
(1)变量如果是结构或类中的字段,如没有显式初始化变量,默认值为0
(2)方法的局部变量必须在代码中显式初始化,之后才能在代码中引用它。
static void Main(string[] args)
{
int i;
Console.WriteLine(i); // Error
Console.ReadLine();
int num=new int() ;
Console.WriteLine(num);//work well
Console.ReadLine();
return;
}
2.3 类型推断
var num=1234;
var str="mozer"
var marrayed=false;
Type numtype=num.GetType(); //System.Int32
Tyep str=str.GetType(); // System.String
Type marrayed=marrayed.GetType(); //System.bool
类型推断中,变量必须初始化,声明了变量,推断出了类型后就不能再改变变量的类型了。
2.3 变量的作用域
变量的作用域就可以在代码中访问该变量的区域。一般情况下
(1)如果某个类在某个作用域内,其字段(成员变量)也在该作用域内
(2)局部变量存在于 声明 该变量的块语句或 方法 结束的花括号之前的作用域内。
(3)在for 、while或类似语句中声明的变量存在于该循环体内的作用域。
2.3.1 字段与 局部变量的作用域冲突
在某些情况下,可以区分名称相同,作用相同的两个变量
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6
7
8 namespace Study
9 {
10
11 class HelloCs
12 {
13 int j = 1;//这个j是声明在类中,是类的成员变量,也叫字段
14 static void Main(string[] args)
15 {
16 HelloCs cs = new HelloCs();
17 int j = 2;//这个j是方法中的局部变量,它隐藏了同名的类级变量,所以代码运行时会先显示为 2
18 Console.WriteLine(j);
19 Console.WriteLine(cs.j); //可以这样引用类级的变量
20 Console.ReadLine();
21 return;
22 }
23 }
24 }
25
2.4 常量
常量 就是其值在使用过程 不会发生变化的变量。声明示例 const float pi=3.1415936;
常量具有如下特征(1)常量必须在声明时就初始化其值,而且不能再修改
(2)其值在编译时必须能用于计算,因此,不能从一个变量中提取值来初始化常量。如果需要这么做,应使用只读字段。
(3) 常量总是静态的,但不必在声明中包含static关键字。
使用常量的好处(1)常量易于理解的标识符替代了含义不明的数字或字符串,使用程序易于阅读
(2)使用程序易于修改
(3)避免程序出现错误
2.5 预定义类型
2.5.1值类型和引用类型
C#把数据类型分为两种:值类型 和 引用类型
基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量 时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
所有的值类型均隐式派生自 System.ValueType。
与引用类型不同,可以从值类型派生出新的类型。但与引用类型相同的是,结构 也可以实现接口。
与引用类型不同,值类型无法包含 null 值。然而,可 译为 null 的类型功能确实允许将 null 赋给值类型。
每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值
2.5.2 CTS类型
C#认可的基本预定义类型并没有内置于C#中,而是内置于.net Framework中。例如在c#中声明一个int类型的数据时,声明 的实际上是.net结构System.Int32的一个实例。
2.5.3 预定义值类型(例如整型、浮点类型、字符型、布尔型)
(1)整型
下表显示了整型的大小和范围,这些类型构成了简单类型的一个子集。
类型 |
范围 |
大小 |
---|---|---|
-128 到 127 |
有符号 8 位整数 |
|
0 到 255 |
无符号 8 位整数 |
|
U+0000 到 U+ffff |
16 位 Unicode 字符 |
|
-32,768 到 32,767 |
有符号 16 位整数 |
|
0 到 65,535 |
无符号 16 位整数 |
|
-2,147,483,648 到 2,147,483,647 |
有符号 32 位整数 |
|
0 到 4,294,967,295 |
无符号 32 位整数 |
|
-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
有符号 64 位整数 |
|
0 到 18,446,744,073,709,551,615 |
无符号 64 位整数 |
如 果整数表示的值超出了 ulong 的范围,将产生编译错误。
2.5.4 浮点型
下表显示了浮点型的精度和大致范围。
类型 |
大 致范围 |
精度 |
---|---|---|
±1.5e−45 到 ±3.4e38 |
7 位 |
|
±5.0e−324 到 ±1.7e308 |
15 到 16 位 |
2.5.5 decimal 类型
decimal 关键字表示 128 位数据类型。同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。decimal 类型的大致范围和精度如下表所示。
类型 |
大 致范围 |
精度 |
.NET Framework 类型 |
---|---|---|---|
decimal |
±1.0 × 10-28 到 ±7.9 × 1028 |
28 到 29 位有效位 |
如果希望实数被视为 decimal 类型,请使用后缀 m 或 M,例如:
如果 没有后缀 m,数字将被视为 double 类型,从而导致编译器错误。
整型被隐式转换为 decimal, 其计算结果为 decimal。 因此,可以用整数初始化十进制变量而不使用后缀,如下所示:
decimal myMoney = 300;
在浮点型和 decimal
类型之间不存在隐式转换;因此,必须使用强制转换在这两种类型之间进行转换。例如:decimal myMoney = 99.9m;还可以在同一表达式中混合使用 decimal 和数值整型。但是,不进行强制转换就混合使用 decimal和浮点型将导致编译错误。
double x = (double)myMoney;
myMoney = (decimal)x;
2.5.6 bool型
bool关键字是 System.Boolean 的别名。它用于声明变量来存储布尔值 true和 false。
2.5.6 字符型
为保存单个字符的值,C#支持字符型
char
关键字用于声明下表所示范围内的 Unicode 字符。Unicode 字符是 16 位字符,用于表示世界上大多数已知的书面语言。
类型 |
范围 |
大小 |
.NET Framework 类型 |
---|---|---|---|
char |
U+0000 到 U+ffff |
16 位 Unicode 字符 |
char 可以隐式转换为 ushort、int、uint、long、ulong、float、double 或 decimal。但是,不存在从其他类型到 char 类型的隐式转换。
System.Char 类型提供几个处理 char 值的静态方法。
2.6 预定义的引用类型
引用类型的变量又称为对象,可存储对实际数据的引用。
C#支持两处内置预定义类型:object和string
2.6.1 objedt类型object 类型在 .NET Framework 中是 Object 的别名。在 C# 的统一类型系统中,所有类型(预定义类型、用户定义类型、引用类型和值类型)
都是直接或间接从 Object 继承的。可以将任何类型的值赋给 object 类型的变量。将值类型的变量转换为对象的过程称为“装箱”。将对象类型的变量转换为值类型的过程称为“取消装箱”。
2.6.2 string 类型
string 类型表示零或更多 Unicode 字符组成的序列。string 是 .NET Framework 中 String 的别名。
尽管 string 是引用类型,但定义相等运算符(== 和 !=)是 为了比较 string 对象(而不是引用)的值。这使得对字符串相等性的测试更为直观