变量
变量初始化
- C#编译器要对变量进行初始化之后才能在操作中引用变量。可以有两个方式确保变量进行了初始化,
- 1、变量是类或结构中的字段,没有显示初始化时,默认是0
- 2、方法的局部变量必须显示的初始化。编译器会检测所有可能的路径,如果发现在变量初始化之前调用则就会产生错误。
-
类型推断
- 类型推断有var关键字
-
常量
- 在变量前面加上const就变为声明常量了,常量具有如下特征
- 1、常量必须在声明时初始化,且初始化之后就不能再修改了。
- 2、常量的值必须能在编译时进行计算,因此不能用变量来初始化常量。
- 3、常量总是静态的,不允许在前面加static。
-
预定义数据类型
- 值类型和引用类型
- 值类型存储在堆栈中,引用类型存储在托管堆上。
- 如果变量是引用,则可以将其值置为null,表示不引用任何对象。
- 基本数据类型都是值类型。C#有15个预定义类型,其中string和object为引用类型。
- 整型
- uint ui = 1234U;
- long l = 1234L;
- ulong = 1234UL;
浮点型
decimal类型
- decimal d = 12.30M;
- 布尔类型
- 与C++不同,0不再表示为false,非0不再表示为true。
- 字符类型
- 与C和C++不同,C#里的char类型是占两个字节。
- object类型
- 所有的内置类型和用户自定义的类型都从object派生而来,可以用object引用绑定任何子类型的对象,也可用于反射,同时提供了一般用途的方法。
- string类型
- 把一个字符串变量赋给另一字符串变量时,内存中对同一字符串的两个引用,但是,与引用类型不同的是,修改其中的一个变量,就会创建一个全新的string对象。字符串字面量前面加上@,则后面出现/时不会转义。
-
流控制
- if、switch、for、while和do-while与C++类似,C#里新增了foreach循环,foreach循环可以迭代集合里的每个元素,如假定arrayofInts为一整型数组,
- foreach(int i in arrayofInts)
- Console.Writeline(i);
-
枚举
- 枚举是用户定义的类型,如
- public Enum timeofDay
- {
- morning = 0,
- afternoon = 1,
- evening = 2
- }
- 数组
- int[] integers = new int[32]; //声明一个32个元素的整型数组
- int[] integers;
- integers = new int[32];//动态声明数组
-
命名空间
- 与文件或类型不同,命名空间是一种逻辑组合,而不是物理组合。对于较长的命名空间,可以给其取个别名,如using alias = Namespacename;而命名空间别名的修饰符是::。
- Main()方法
- 对于多个Main方法,可以使用/main编译选项,如/main:Classname,来指定哪个方法作为入口函数。
- 给Main()方法传递参数
- public static int main(string[] args)
- {
- for(int i = 0; i < args.Length; i++ )
- Console.Writeline(args[i]);
- }
-
C#预处理指令
- #define和#undef
- #define DEBUG、#undef DEBUG只是在编译代码时存在,通常和#if、#elif、#else和#endif一起使用。如
- #if DEBUG
- Console.Writeline(“DEBUG MODE”)
- #endif
- 编译器遇到#Warning和#error时,会分别产生警告和错误。
- #region和#endregion用于把一块代码标记为有给定名称的一个块。
- #region Member Field Declare
- int i = 0;
- #endregion
- #line用于改变编译器在警告和错误信息中显示的文件名和行号信息。
- #pragma抑制和恢复指定的编译警告。
-