[读书笔记]C#高级编程 20120527
枚举
枚举是用户定义的整数类型,具有更易于维护,使代码清晰,更易于键入等优点
枚举在语法上被认为是基本类型,与int和float类似。
毕竟,使用更具有说明功能的名字可比干巴巴的数字来得人性得多
枚举值可以从字符串中获取
1 TimeOfDay time = (TimeOfDay) Enum.Parse(typeof(TimeOfDay), "afternoon", true);2 Console.WriteLine((int)time2);
枚举的基类型可以使int,byte,short,long等等整数类型
看起来就像继承一样
名称空间
名称空间定义了一种逻辑上的组合来组织相关类型和其他类型。
使逻辑组合,而不是物理组合,一个名称空间可以分布在不同的项目中,而一个代码文件中也可以包含多个名称空间
名称空间告诉使用类的其他开发人员,这两个类使如何相关的以及如何使用它们。
名称空间可以嵌套,每个名称空间都由它所在的名称空间的名称组成,这些名称用句点隔开,开头是最外层的空间,最后是它自己的短名。
名称空间使得有相同短名的类可以再同一个程序中使用了。
可以声明多部分的名称空间,但是不能在嵌套的名称空间里声明多部分的名称空间
一般在开始一个项目的时候便开始计划名称空间的层次结构。
using语句可以用来引用名称空间,以便在代码中只使用类的短名,而不是长长的全名
如果using语句引用的两个名称空间包含同名的类型,就必须使用完整的名称,至少能分辨的名称
using关键字的另一个用法使为名称空间指定别名。如果名称空间特别长,而由于有重名类,或者其他原因不希望该名称空间的名称包含在using指令中,就可以该名称空间指定一个别名
1 #using System; 2 #using Addin = Moi.Console.Addin; 3 class Test 4 { 5 public static int Main() 6 { 7 int[][] numbers = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; 8 Addin::Table table = new Addin::Table(numbers); 9 Console.WriteLine(table);10 Console.Read();11 return 0;12 }13 }
注意名称空间别名的修饰符是"::"。因此,将先从Addin名称空间开始搜索。即使在相同的作用域中引用了一个名称为Addin的类,"::"运算符也允许引用别名。
以上代码是一个将二维数组,或者其他二维数据以二维表的格式输出到控制台的小插件。
Main()方法
C#程序是从Main()方法开始执行的。这个方法必须是静态方法,并且其返回类型必须是int或者void。
虽然显示指定public是很常见的,因为按照定义,必须在外部访问它,但其实即使把该方法标记为private,它也可以运行。
C#允许出现多个Main()方法,但是只能有一个作为入口点,需要在编译的时候使用/main:类全名指定某个Main()方法作为入口点。
csc DoubleMain.cs /main:Moi.Examples.DoubleMain
给Main()方法传递参数,下面的例子是在传送给Main()方法的参数中循环,并把每个选项的值写给控制台
1 using System; 2 class ArgsExample 3 { 4 public static int Main(string[] arguments) 5 { 6 for (int i = 0; i < arguments.Length; i++) 7 Console.WriteLine(arguments[i]); 8 return 0; 9 }10 }
编译完成后,在命令行输入
ArgsExample /a /b /c
/a
/b
/c
编译选项
MSDN文档介绍了C#编译器的所有编译选项,这里只介绍其中最重要的选项
/target选项用来指示将要生成的文件类型,通常简写为/t
/t:exe 控制台应用程序(默认)
/t:library 带有清单的类库
/t:module 没有清单的组件
/t:winexe Windows应用程序(没有控制台窗口)
如果想得到一个可由.NET运行库加载的非可执行文件(如dll),就必须把它便以为一个库。如果把C#文件编译为一个模块,就不会创建任何程序集。虽然模块不能由运行库加载,但可以使用/addmodule选项编译到另一个清单中。
/out选项可以指定由编译器生成的输出文件名。如果没有指定/out选项,编译器就会使用输入的文件名。
/out 和 /t选项必须放在要编译的文件名前面。
使用/r:MyLibarary.dll选项添加引用。
TAG: