2012年5月27日星期日

[读书笔记]C#高级编程 20120527

[读书笔记]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: