1. 在代码世界中,一定是先有类(模板),然后才可以根据这个类模板来创建对象.
2. 类:是对1群具有相同特征和功能的事物的1个统称. 类不能直接使用.
是用来描述1群事物.
3. 定义类:
a. 语法:
class 类名
{
}
b. 位置:
定义在命名空间的下面.
4. 类的里面应该定义什么:
a. 将这类事物拥有的共同特征定义为类的成员变量.
b. 将这类事物拥有的共同的功能定义为方法.
我们在自己写的类中 不要加static 时机到了 哥自己就会讲.
5. 因为类是抽象的,所以类不来拿来直接使用.如果你非要用的话.
只有找到这个类中的1个对象,然后这个对象就会拥有类中功能
使用这个对象就可以了.
6. 如何找到类中的1个对象 并使用这个对象呢?
创建对象的过程.
创建类的1个对象的语法:
类名 对象名 = new 类名();
Person p1 = new Person();
当执行到这句代码的时候. 就根据Person类的模板创建了1个p1对象.
这个p1对象中有person模板中定义的所有的东东.
这个p1就可以使用 因为它是1个对象.
7. 访问对象中的功能
对象名.成员
---------------------------------------------------------------------------
8. 定义在类中的东东,我们统称为类的成员.
成员变量: 将这类事物具有的相同的特征 定义为成员变量. 也叫做 字段、成员字段.
方法: 将这类事物具有的相同的功能定义方法 也叫 成员方法,
9. 创建类的对象.
类名 对象名 = new 类名();
Person p1 = new Person();
Person本质上是1个我们自己定义的数据类型.
p1是1个变量.
new Person(); 是1个表达式. 将这个表达式的结果通过赋值符号赋值给p1变量.
10. 对象如何在内存中分配.
Person p1 = new Person();
a. Person是自定义的数据类型 p1是1个变量.那么既然p1是个变量 就应该在内存中开辟空间.
b. new Person()是1个表达式.
new是个运算符.
new关键字做的事情:
1). 在堆内存中开辟1块合适大小的空间.
2). 在这个空间中根据类的模板来创建对象.
new的是哪1个类,就根据这个类的模板来创建对象.
类模板中有什么,都会依次的创建在这个对象中.
3). 调用这个对象的构造函数.
4). 返回这个对象在堆空间中的引用地址.
11. 调用对象的成员.
这个时候我们根据类的模板创建好了对象,这个对象就可以直接使用了.
这个对象里面就拥有了类的成员.
语法:
对象名.成员;
点代表 的 意思. 之 の
12. 我们在VS中写C#代码.如果点不出来,那就是真的没有.
如果你硬要写上去 那么后果一定是报错.
13. 类的成员的访问修饰防
public 公共的. 被public修饰的成员可以在任意的地方通过对象名点出来访问.
private 私有的. 被private修饰的成员只能在本类的内部通过对象名点出来访问。
无论是public还是private修饰的成员 都可以直接在类的内部访问. 因为作用域.
如果我们不为类的成员写任意的访问修饰. 那么默认是private
14. 如果通过对象名想去点出对象中的成员,但是发现点不出来.
原因有二:
a. 对象中根本没有这个成员
b. 有,但是访问权限不够.
15. 为对象的字段赋值.
一定要搞清楚,是在为对象的字段赋值. 字段其实就是1个变量.
所以为对象的字段赋值的数据的类型 要和这个对象的字段的类型保持一致.
也可以取出对象的字段的值.
字段在声明的时候,如果没有为其赋值.那么字段是有默认值的.
如果字段的类型是引用类型的 那么默认值是null
如果字段的类型是值类型的 那么默认值是 0
16. 在写类的时候需要注意的2个规范.
a. 类的命名: 一定要有意义. 这个类描述的是哪1群事物 那么就用这个事物的名称来命名就可以了.
每个单词的首字母大写. 名词.
变量的命名规范: 名词。首个单词的首字母小写 其他的单词的首字母大写.
方法的命名规范: 动词. 每个单词的首字母大写.
b. 1个类独占1个源文件.
我们在添加1个类的时候. 指定的名称是 新增的源文件的名称.
建议类的名称和这个源文件的名称保持一致. 这么做的好处方便管理.
17. 类的对象可以创建任意个.
同1个类的多个对象之间毫无关系. 他们唯一的关系就是 是根据同1个模板创建出来的.
他们都具有相同的成员. 并且各自都拥有1份.
特别是对象的字段的值. 对象之间互不影响 都是自己独有的.
18. 命名空间
namespace 用于定义1个命名空间.
在命名空间中 我们可以定义类. 类是属于命名空间的.
要访问类的地方所在的命名空间如果和类所在的命名空间是相同的.那么直接就可以使用类名来访问这个类.
如果不一样: 那么就不能直接访问了.
这个时候可以通过如下两种方式来访问:
a. 使用类的全名称: 使用顶级命名空间一直往下点到这个类.
b. 使用using关键字 将类所在的命名空间引入. 然后在这个页面中就可以直接访问这个命名空间中的类了.
在using的时候 只要点到命名空间就可以 不要再点出类了.
命名空间的作用:
在同1个命名空间中 不允许定义多个类的名称是相同的.
命名空间的作用在于防止类名冲突.
让VS自动的帮助我们导入类的命名空间. 快捷键 ctrl+.
19. 类是引用类型的.
值类型与引用类型.
值类型:所有的数值类型、bool、char、枚举、结构.
引用类型:string、数组、类.
相同点:
局部变量无论是引用类型还是值类型,这个局部变量都是开辟在栈空间中的.
成员变量无论是引用类型还是值类型,这个变量是跟随着对象一起开辟在堆空间中的.
因为成员变量是属于对象的 对象在堆空间中 那么儿子自然也应该跟着老爸一起.
不同点:
值类型的变量真实的值 直接存储在该变量中
引用类型的变量无论是局部变量还是成员变量 真实的对象存储在堆空间中. 变量中存储的是对象在堆空间中的地址.
局部变量:定义在方法中的变量.
成员变量/字段/成员字段: 是直接定义在类下面
值类型变量之间相互赋值: 因为值类型的变量中存储的是真实的值.所以拷贝传递的也是真实的值.
赋值完成以后 对1个变量进行修改不会影响另外的1个变量的值.
引用类型变量之间相互赋值: 因为引用类型的变量中存储的是对象的地址 所以拷贝传递的也是地址
赋值完成以后 对1个变量指向的对象进行修改 会影响另瓦的1个变量指向的对象
因为这两个变量指向同1个对象.
凡是看到了new关键字.就说明在内存中重新的创建了1个对象了.
20. 在方法中直接访问了字段的值.
方法的是谁的字段?方法属于那个对象, 那么访问的就是那个对象的字段 。
21. 类 类型当做方法的参数.
这样是可以的. 类其实就是我们自定义的数据类型.