类与对象---初体验

 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. 类 类型当做方法的参数.
 这样是可以的. 类其实就是我们自定义的数据类型.

原文地址:https://www.cnblogs.com/sabry34126/p/3826587.html