二维数组:
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{}来为枚举值指定其他整数类型
转载于:https://www.cnblogs.com/dave314/p/3836529.html