位于任何命名空间之外的语法元素都被认为是放在匿名全局命名空间中的。
在同一个项目中的语法元素可以声明在多个文件中,它可以是类、结构或接口。当然它们必须在同一个命名空间中。
#define:定义用于条件编译的符号,为#if、#elif、#else及#endif所用。
#error:将引发一个自定义的编译错误,通常用于防止编译期间符号定义出现冲突。
#warning:生成一条警告信息,但不会中断编译操作。
#pragma warning disable,#pragma warning restore:暂时关闭和恢复C#编译器产生的某些特定的警告信息。
#line:改变编译错误或警告信息来源的行号(甚至文件名)。
#region,#endregion:可以实现收起和展开某个特定的代码段。
用using关键字可以为命名空间或类型定义别名。如果定义在命名空间之外,别名生效的范围仅限于当前文件。若定义在命名空间里,则生效的范围为当前代码块与定义别名的命名空间之交集。
using C = System.Console;
class Program{
static void main(){
C.WriteLine("Hello");
}
}
命名空间别名限定符“::”,这个用在类型的左边,就能让编译器知道这个类型限定在一个别名之下。class Program{
static void main(){
C.WriteLine("Hello");
}
}
C#2.0引入了了全局限定符global,当器出现在命名空间别名限定符之前时,表示通知编译器我们需要的是一个命名空间的名字。
外部别名(extern)允许使用分别定义在两个不同程序集中,但类型名称和命名空间都一样的两个类型。
如果//或者/*...*/格式的注释以TODO、HACK或UNDONE开头,就会被自动添加到任务列表中。
命名约定:PascalCase:每个单词的首字母使用大写字母:MyVariable
camelCase:第一个单词的首字母使用小写:myVariable
微软推荐C#中使用PascalCase命名约定来表示方法、事件名、共有字段名、属性名、常数名、命名空间名、类名、结构名、委托名、枚举名、接口名和attribute名的标识符命名。
camelCase命名约定则用于为变量和方法参数命名。
另外,私用实例成员名可以采用“m_”前缀,私用静态成员名可以采用“s_”前缀。
循环的性能优化:
- 如果循环内调用的方法接受很多参数,那么最有效率的方法就是把那个方法的代码直接复制到循环体中(内联法);
- 如果需要不断访问一个对象的属性而且知道在循环过程中它将保持不变,那么最好在开始循环之前将它缓存在一个局部变量中。
- 考虑用StringBuilder类代替循环中的String类来执行字符串的连接操作。
- 如果可以的话,用循环代替递归;
- 如果循环的终止条件必须检测多个条件,将最有可能满足的条件放在前面。
- for循环比foreach循环效率略有提升。