首页 > 代码库 > C#基础拾漏(1)

C#基础拾漏(1)

二维数组:
    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{}来为枚举值指定其他整数类型