C# 2008引入了一些新的东西如LINQ、WCF、WPF,其中由LINQ引入的新的特征包括lambda表达式、扩展方法、表达式树(表达式目录树),匿名对象、隐式类型等。
每个源文件都是一个编译单元
using 指令:隐式的使用命名空间,为命名空间创建别名。
using指令必须放在一个名称空间内的第一个成员之前。
如果引用的一个dll中包含一个Anamespace.B.namespace.ClassC.MethodD(),在工程中同样包换一个Anamespace.B.namespace.ClassC.MethodD()。如果想调用dll中的MethodD()而不是工程中的MethodD()可以使用extern alias为程序集创建别名。在工程中声明 extern alias Test,调用方法时使用Test::Anamespace.B.namespace.ClassC.MethodD(),编译工程时使用csc Program.cs /r:Test=*.dll,或者添加引用时设置属性
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ClassLibraryTest 8 { 9 namespace Test 10 { 11 public class Class1 12 { 13 public static void MethodA() 14 { 15 Console.WriteLine("ClassLibraryTest.Test.Class1.MethodA"); 16 } 17 } 18 } 19 }
1 extern alias test; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 9 namespace ConsoleApplicationReference 10 { 11 class Program 12 { 13 static void Main(string[] args) 14 { 15 test::ClassLibraryTest.Test.Class1.MethodA(); 16 Console.ReadKey(); 17 } 18 } 19 } 20 21 namespace ClassLibraryTest 22 { 23 namespace Test 24 { 25 public class Class1 26 { 27 public static void MethodA() 28 { 29 Console.WriteLine("NOClassLibraryTest.Test.Class1.MethodA"); 30 } 31 } 32 } 33 }
Main函数有四种签名:static void Main()
static int Main()
static void Main(string [] args)
static int Main(string [] args)
Main函数必须为静态的且为私有的,如果不传递任何参数,args也不是null,但数组长度为零,其返回值在内部缓存起来供进程间通信使用,退出代码存储在进程环境块(Process Environment Block)中,可以通过GetExitCodeProcess应用程序编程接口进行访问。
如果程序中有两个Main函数可以使用编译器指定使用哪一个:csc /main:AnameSpace.BClass main.cs.
可空类型:int? a=null;增加了HasValue和Value两个属性,当为空的时候HasValue为false;
空结合运算符(??) variable ?? value,如果可空类型包含一个值,则表达式等于该值,如果为空,则表达式为value.