二维数组: 
    int[,] arr=new int[2,3];     
    arr.GetLength(int i)//获取第i维的长度     
    arr.Rank//获取维度     
    arr.Length//获取总元素个数     
交错数组:     
    本质上是一维数组,一维数组的每个元素都是一个数组     
    int[][] arr = new int[2][];     
    arr.Rank 返回1     
可变参数:     
    params只能修饰一维数组,比如int[] arr     
    调用方法时,可以传一个数组arr,也可以传一个int列表,1,2,3这样     
    调用的时候会列表封装成一个数组进行传递     
    必须放在最后     
ref/out:     
    参数传递的是地址,调用时要带上ref/out参数,只能修饰变量     
对象创建时的内存分配:     
    new 运算符:     
        1.在内存中开劈一块合适大小的空间     
        2.在这个空间里创建对象     
        3.调用这个对象的构造函数     
        4.返回这个对象的引用地址     
    Person p1 = new Person();     
    1.在栈中开辟一块空间,用来存放对象的引用地址     
    2.在堆中开辟一块空间,再在这个空间中开辟一块一块小空间存放各个成员变量     
    3.堆中的这块空间中,还有一个变量保存了一个地址,这个地址指向方法表中Person类的方法表(代码区)     
    4.赋值,把堆的首地址放在栈中去     
    在方法调用时,要访问成员变量,谁去调用这个方法,就使用谁的成员变量     
类的访问修饰符:     
    只有public和internal,不带修饰符时默认是internal     
属性:     
    属性的类型不一定和对应的字段的类型一致,可能通过逻辑判断之后赋给其它类型     
ctrl+shift+空格:     
    函数参数列表提示     
构造函数相互调用:     
    public Person():this("张三",18){}     
    public Person(string name, int age){this.Name=name;this.Age.age;}     
    调用时会先执行带参数的构造函数,然后执行无参构造函数的赋值代码。     
隐式构造函数:     
    没定义构造函数时,有一个无参的隐式构造函数,定义了构造函数则没有隐式构造函数     
部分类:     
    用partial修饰,在一个命名空间下同名称的类,编译的时候会编译成一个类     
    便于分开管理和维护,Form类,窗体控件管理在一个部分类中,而控件各种行为在另一个部分类中。     
常量:     
    const修饰的变量,只能在(且必须在)声明时赋值,编译时,声明语句没有了,直接用常量值替代常量出现的地方。     
    在编译时就要确定值。     
只读变量:     
    只能在构造函数中改变,声明的也可以赋值,编译时会把赋值语句编译到构造函数中去。     
    在编译时才需要确定值。     
枚举:     
    把一个不存在与枚举值的整型数强转成枚举值不会报错,输出时直接输出数字。     
    枚举值默认是int型的,可以通过enum Direction:byte{}来为枚举值指定其他整数类型     
原文地址:http://www.cnblogs.com/dave314/p/3836529.html