类型推断
使用关键字var。编译器可以根据变量的初始化值“推断”变量的类型。例如:
int someNumber = 0;
就变成:
var someNumber = 0;
即使someNunber从来没有声明为int, 编译器也可以确定, 只要someNunber在其作用域内,就是一个int。编译后,上面两个语句是等价的。
局部变量的作用域冲突
同名的局部变量不能在同一作用域内声明两次。(这跟C/C++很不一样,也就不存在“局部覆盖”的问题了)。
值类型和引用类型的存储位置
值类型存储在堆栈中,而引用类型存储在托管堆上。
C#所有的数据类型与平台无关。
decimal类型,128位高精度十进制数表示法,不是基本类型,所以使用该类型会有性能损失。
C#支持两种预定义的引用类型,object和string。object,根类型,CTS中的其它类型都是从它派生而来的(包括值类型)。string,Unicode字符串。
可以在字符串字面量的前面加上字符@, 在这个字符后的所有字符都看作是原来的含义---它们不会解释为转义字符:
string filepath = @"C:\ProCSharp\First.cs";
甚至允许在字符串字面量中包含换行符。
在C#中,if语句的表达式必须等于布尔值。不能直接测试整数(如从函数中返回的值),而必须明确地把返回的整数转换为布尔值true或false。
C#中,switch语句的每一个case语句必须加break,否则报错!但有一种例外情况。如果一条case子句为空,就可以从这个case跳到下一条case上,这样就可以用相同的方式处理两条或多条case子句了。
另一个与C++中的switch语句不同的地方:在c#中可以把字符串用作测试的变量。
因为using语句在C#文件的开头,而C和C++也把#include语句放在这里,所以从C++迁移到C#的程序员 常把名称空间与C++风格的头文件相混淆。不要犯这种错误,using语句在这些文件之间并没有建立物理链接。C#也没有对应于C++头文件的部分。
结构与类的区别是它们在内存中的存储方式、访问方式(类是存储在堆heap上的引用类型,而结构是存储在栈stack上的值类型)和它们的一些特征(如结构不支持继承)。
较小的数据类型使用结构可提高性能。
通过值传送变量是默认的,也可以迫使值参数通过引用传送给方法。为此,要使用ref关键字。如果把一个参数传递给方法,且这个方法的输入参数前带有ref关键字,则该方法对变量所做的任何改变都会影响原始对象的值。在调用该方法时,还需要添加ref关键字。