数往知来C#面向对象准备〈二〉
面向对象(OOP→Object-Oriented Programming)
1.什么是面向对象?
一种分析问题的方式。
2.面向对象三大特征:
封装(隐蔽代码实现/复用/修改方便)、继承、多态。
3.什么是类?什么是对象?类和对象的区别?如何写一个汽车类?
类是模具,创建对象的模具,抽象的。
类是一种数据类型,用户自定义的数据类型
类组成:字段、属性、方法、构造函数等
对象是具体的,是类的具体实例。
对象具有属性(特征)和方法(行为)
案例:创建学生类,老师类,通过构造函数初始化类内部字段
4.this 当前对象
5.类与对象的关系:类是用来描述事物的
对象是这类事物存在的个体
描述对象就是描述对象的特征(字段)与行为(方法)
例如:
杨老师和刘波学员都有姓名、性别、年龄等
杨老师有讲课的行为,学生有学习的行为
6.类和对象的区别:
类是抽象的概念,仅仅是模板,比如说:“人”类
对象是一个你能够看得到、摸得着的具体实体
"人"类都有:姓名\性别\年龄 属性,有说话的方法.
张三是一个对象,他的姓名属性的值:张三 性别的属性的值:男 年龄属性的值:20 张三会说话
对象可以叫做类的实例(Instance)
类只占一块内存,每个对象单独的占用一块内存。
7.类的定义:
定的定义语法:
[访问修饰符] class 类名
{
成员;
......
}
类中可以包含变量的定义、方法。
8.类的实例化:
类的实例化,用关键字new
语法: 类 实例名 = new 类();
类的成员的访问:
实例名.属性 实例名.方法名();
字段、方法、属性(后面讲)都可以叫做类的成员Member,它们都需要定义访问级别。访问级别的用处在于控制成员在哪些地方可以被访问,这样达到面向对象中“封装”的目的。
访问修饰符:public private (internal protected)
9.属性
字段用public修饰的问题.
属性的定义.get;set;
属性是为了保护与之相对应的字段的.保证对字段的读取和赋值符合要求.
属性可分为:读写、只读、只写
允许外部访问的变量一定要声明为属性
属性的本质-就是两个方法。
10.类的构造方法
构造方法初始化对象的字段属性。
构造函数是用来创建对象的特殊方法,方法名和类名一样,没有返回值,连void都不用。
构造函数可以有参数,new 对象的时候传递函数参数即可
如果不指定构造函数,则类有一个默认的无参构造函数。如果指定了构造函数,则不再有默认的无参构造函数,如果需要无参构造函数,则需要自己来写。
构造函数可以重载,也就是有多个参数不同的构造函数。
认识类图
11.c#中的类图和通用类图

12.封装:
提问:大家觉得什么是封装?
遥控器刚出来时候很神奇,点个按钮就能换电视台、切音量、关电视。而我们使用遥控器的人不需要知道他是怎么实现的(你只需要付钱就可以)
和遥控器类似,面向对象的封装就是把事物的状态和行为封装在类中,使用类的人不需要知道类内部是怎么实现的,只要调用其中的属性和方法实现功能就行。就像你使用遥控,不需要知道他是怎么控制电视的,只要知道按钮能换台就行
类和对象本身就是封装的体现。
属性封装了字段、方法和字段封装成了一个对象、将一堆业务单一的代码封装到了一个方法中、将一个功能封装到了几个类中、将一些具有相同功能的代码封装到了一个程序集中(dll、exe),并且对外提供统一的访问接口。(属性名、方法名等。)
13.This关键字
this:
1.作为当前类的对象,可以调用类中的成员。this.成员(调用成员,自己)
2.调用本类的其他构造函数。:this()(调用构造函数,自己)
14.命名空间-虚拟的文件夹系统
namespace(命名空间),用于解决类重名问题,可以看做“类的文件夹”。
如果代码和被使用的类在一个namespace则不需要using。
在不同命名空间下的类调用有两种方法:
写全称 命名空间.类名
先using引用命名空间,再调用
注意:
1.方法的参数列表里 声明的形参变量在调用的时候才开辟空间存储在栈里
2.当变量是一个类的成员变量的时候,那么该变量是跟随类的对象存在于堆内存,但是对象引用断开时,等垃圾回收器。
3.当变量是一个方法的局部变量时,那么该变量是在方法被调用时, 存在于栈内存;方法执行完毕后就立即销毁。
数往知来C#面向对象准备〈二〉的更多相关文章
- 数往知来C#之面向对象准备〈一〉
1.CLR加载编译源文件 注1.:当你点击调试或者生成解决方案的时候这就是一个编译过程首先CLR加载源文件也就是你写的代码(此代码在文件中是字符串)然后将项目中的嗲吗编译成IL代码进而生成程序集 证明 ...
- 〈二〉ElasticSearch的认识:索引、类型、文档
目录 上节回顾 本节前言 索引index 创建索引 查看索引 查看单个索引 查看所有索引 删除索引 修改索引 修改副本分片数量 关闭索引 索引别名 增加索引别名: 查看索引别名: 删除索引别名: 补充 ...
- 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型
前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...
- Java面向对象 IO (二)
Java面向对象 IO (二) 知识概要: (1)字节流概述 (2)字节流复制图片 (3)IO流(读取键盘录入) (4)读取转换流,写入转换流 字节流概述 ...
- Javascript面向对象编程(二):构造函数的继承 作者:yuan一峰
Javascript面向对象编程(二):构造函数的继承 作者: 阮一峰 日期: 2010年5月23日 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生 ...
- js面向对象编程(二)构造函数的继承(转载)
Javascript面向对象编程(二):构造函数的继承 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继 ...
- JavaScript 面向对象编程(二):继承
Javascript面向对象编程(二):构造函数的继承 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继 ...
- Java——面向对象的特征二:继承性
2.1面向对象的特征二:继承性 ①引入类继承最基本的作用是:代码重用. ②语法 [修饰符列表] class 子类名 extends 父类名{ 类体; } ③子类继承父类以后,父类中声明的属性.方法,子 ...
- 数往知来C#面向对象〈三〉
C# 基础方法篇 一.复习 1)方法的重载 方法的重载并不是一个方法,实际上方法的重载就是一些不同的 方法,目的是为了方便程序员编码,所以将功能相近的方法命名相同 根据参数,编译器自动的去匹配方法体, ...
随机推荐
- MySQL错误代码大全【转载】
B.1. 服务器错误代码和消息 服务器错误信息来自下述源文件: 错误消息信息列在share/errmsg.txt文件中."%d"和"%s"分别代表编号和字符串, ...
- Hadoop基础教程之搭建开发环境及编写Hello World
整个Hadoop是基于Java开发的,所以要开发Hadoop相应的程序就得用JAVA.在linux下开发JAVA还数eclipse方便. 1.下载 进入官网:http://eclipse.org/do ...
- dubbo/dubbox部署资料收集
dubbo/dubbox部署资料收集 最近由于项目需要要部署bubbox,dubbo,在找资料过程中用的的一些网址如下,后来由于取消没有实际应用,以备今后再用 http://dubbo.io/Admi ...
- DELPHI中IDE宏录制小用
用DELPHI的宏可以做一些非常简便的工作, 它是记录键盘的动作,如果我们将一些有规律的动作,用宏来进行操作,就可以达到事半功倍的效果,前提是编写的代码风格比较整洁. 宏是以Ctrl + Shift ...
- C++:类的组合
在类中定义的数据成员一般都是基本数据类型或服复合数据类型.但是还可以根据需要使用 其他类的对象作为正在声明的数据成员.复杂的对象还可以有比较简单的对象一某种方式组合 而成,复杂对象和组成它的简单对象之 ...
- Maven找不到java编译器的问题
当使用mvn package打包项目的时候,抛出下面这个错误: [ERROR] Unable to locate the Javac Compiler in: D:\jdk\..\lib\tools. ...
- 面试题_1_to_16_多线程、并发及线程的基础问题
多线程.并发及线程的基础问题 1)Java 中能创建 volatile 数组吗?能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组.我的意思是,如果改变引 ...
- bzoj4046
分组赛的题……madan原题,考试想不出来真是SB得不行 首先,从大往小加边,每次加边如果成环必然弹出环上最大边 考虑询问[x,y],如果边权在[x,y]的边弹出了小于等于y的边j,说明j不在最小生成 ...
- 实现一个简单的FTP服务器(十四)
此为一个网络编程的一个系列,后续会把内容补上...
- ios 编译openssl支持arm64(转)
最近在编译支付宝 快捷支付(无线) ios 端的时候发现demo不支持arm64.在网上找了下,看到客服说是openssl的库文件不支持arm64,于是自己编译了支持arm64的库文件,发现还是不行, ...