1、类的定义:(类文件后缀cs 读作c smarp)
== [字段、属性、方法]
[属性,get/set的合体]==
封装:字段[类的属性]私有化,同时为这些字段能够在外界被访问提供对应的get/set
①:快捷键ctrl+r+e 为字段的访问提供对应的属性
一般字段名小写,而属性名大写
Student s = new Student();
s.Sno = 12;//本质是get方法的调用
Console.WriteLine(s.Sno);//本质是set方法的调用
//s.Sno首先判断是读还是写,读就调用get方法,写就调用set方法
在C#中属性的本质是方法,对象的数据存储在对象中
属性中只有get块,没有set块,称为只读属性
②: c#自动属性,将属性背后操作的那个字段彻底隐藏,目的是简化类的编写
快捷键:prop+tab+tab
自动属性(隐藏字段)的缺陷:无法具体控制get、set的访问逻辑
③:递归[自己调用自己]层数32层,无限递归会报错
④:c#方法命名规范和类的命名规范是一样的,每个单词首字母大写
⑤:static:静态的,修饰类、字段、方法
没有被static修饰的字段、属性称为非静态资源
静态属性:被static修饰的字段(属性),在内存中对于所有的该对象共享一份
和java不同:类中静态成员不能通过对象访问,只能够类名.成员
静态方法[一般是工具方法]:在静态的方法中不能访问非静态的成员(对象特有的属性),只能访问静态的成员
静态类:在静态类中只能出现静态的成员,静态类是不能被实例化的
⑥: 内存分配
A:栈
* 存储局部变量
局部变量:定义在方法声明上和方法中的变量
- B:堆
- 存储new出来的数组或对象(new出对象时知道大小)
一个对象在内存中占两块空间,
堆中储存对象 (不能直接访问,通过栈地址访问,s.Sno 即 栈.堆),
栈中储存地址(有几个对象数几个new)
(一个栈地址储存一个堆对象,后面的栈对象会覆盖前面的)
- 存储new出来的数组或对象(new出对象时知道大小)