第二章 基础
1,helloworld示例:
helloworld.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace HelloWorld { class Program { static void Main(string[] args) { Console.WriteLine("Hello Wold. C#"); return; } } } |
使用csc helloworld.cs编译它
2,C#main函数
static void Main()
{
}
Main函数必须为静态类型,而且返回值不是void就是int
3,C#中的方法定义
[modifiers] return_type MethodName([parameters])
修饰符(modifiers):用于指定用户定义的某些方法的特性。
4,变量
变量的初始化:
- 变量是类或者结构中的字段,如果没有显式初始化,创建这些变量时,值为0。
- 方法的局部变量必须在代码中显式初始化才能使用,否则会报错。
5,类型推断
var name = value;
变量必须初始化,声明变量并推断出类型后类型不可改变。
6,变量的作用域
只要类在某个作用域内,字段也在该作用域内。
局部变量存在于表示声明该变量的块语句或方法结束的封闭花括号之前的作用域内。
同名的局部变量不能在同一作用域内声明两次,但是字段可以和局部变量同名。
6,常量
常量使用const修饰
常量必须在声明时初始化,然后值就不能改变了,
7,值类型和引用类型
值类型:存储在堆栈中,直接存储值
引用类型:存储在托管堆上,存储引用
8,预定义的值类型和引用类型
值类型:
- 整型:
名称 |
CTS类型 |
说明 |
sbyte |
System.SByte |
8位有符号整数 |
short |
System.Int16 |
16位有符号整数 |
int |
System.Int32 |
32位有符号整数 |
long |
System.Int64 |
64位有符号整数 |
byte |
System.Byte |
8位无符号整数 |
ushort |
System.Uint16 |
16位无符号整数 |
uint |
System.Uint32 |
32位无符号整数 |
ulong |
System.Uint64 |
64位无符号整数 |
uint ui = 12U;
long l = 10L;
ulong ul = 123UL;
- 浮点类型
名称 |
CTS类型 |
说明 |
位数 |
float |
System.Single |
32位单精度 |
7 |
double |
System.Double |
64位双精度 |
15/16 |
float f = 1.2F;
- decimal类型
名称 |
CTS类型 |
说明 |
位数 |
decimal |
System.Decimal |
128位高精度十进制 |
28 |
decimal d = 1.2M;
- bool类型
用于包含布尔值true和false
名称 |
CTS类型 |
说明 |
位数 |
bool |
System.Boolean |
true或者false |
NA |
注:bool类型不能和数值类型相互转换
- 字符类型
名称 |
CTS类型 |
说明 |
位数 |
char |
System.Char |
表示一个16位Unicode字符 |
16 |
使用单引号表示单个字符
除了把char表示为字符字面量之外,还可以用4位十六进制的Unicode值如'\u0041'带有数据类型转换的整数值(char)65,或者十六进制数'\x0041'来表示他们。
转义序列
转义序列 |
字符 |
\' |
单引号 |
\" |
双引号 |
\\ |
反斜杠 |
\0 |
空 |
\a |
警告 |
\b |
退格 |
\f |
换页 |
\n |
换行 |
\r |
回车 |
\t |
水平制表 |
\v |
垂直制表 |
引用类型
名称 |
CTS类型 |
说明 |
object |
System.Object |
根类型 |
string |
System.String |
Unicode字符串 |
string s = @"a\a"; @表示将后面的字符看成原来的意思
9,流控制
if(condition) statement(s);//condition必须为bool类型
switch…case
case值必须为常量表达式,不允许使用变量。可以把常量字符串用做测试变量。
必须使用break,除非case语句为空。
10,循环
for,while,do..while循环和C/C++相同
foreach循环:支持IEnumerable接口的对象。
例:
int[] a = {1,2,3,4,5}; foreach(int i in a) { //operation } |
每次迭代集合中的一个元素,不能改变元素。
11,跳转语句
goto:
goto Label1;
Lable1:
statements;
goto不能跳转到循环中,不能跳出类,不能退出finally
break
用于退出switch,for,foreach,while,do…while循环
continue
跳过当前迭代,用于for,foreach,while,do…while
return:返回
12,枚举
public enum A { a = 0, b = 1, c = 2 } |
13,数组
所有数组均为引用类型
声明:int[] a = new int[10];
14,命名空间
命名空间可嵌套。
不允许在另一个声明的命名空间中声明多部分的命名空间。
使用using语句引入命名空间。
使用using alias = NameSpace;声明命名空间的别名。
15,Main方法
Main方法的返回值必须为int或者void,使用string[] args输入参数。可以使用多个Main方法,编译时使用/main开关指定Main方法。
16,编译文件
使用/t或者/target选项指定文件类型,
/t:exe:控制台程序
/t:library:带清单的类库
/t:module:不带清单的类库
/t:winexe:Windows应用程序
/out:指定文件名
/out和/target必须位于文件名前。
17,控制台I/O
格式化结果:{n,w:Pm};
n:参数索引
w:宽度值,正值表示右对齐,负值表示左对齐,实际长度大于n无效
P:格式选项
m:精度
18,预处理指令
#define/#undef
条件编译:
#if
#elif
#else
#endif
#warning/#error
#pragma:抑制或者恢复警告