C#基础篇--面向对象(类与对象)
1.类是什么?
类就相当于模板,就是把同一类的事物的共同特征进行的抽象。
类的创建和说明:
类是先根据一些具体的对象(实体的东西)来抽象出来的共同的特性,然后用代码来表示.
在类中,用数据表示事物的状态,用函数(方法)实现事物的行为动作。
当创建一个类时,系统会默认的添加一个构造函数,如果用户自己写一个构造函数则会覆盖这个默认的构造函数。当然构造函数也是可以重载的。
构造函数的特点:
- 构造函数名必须与类名相同。
- 不能有任何的返回值类型。
- 访问修饰符一般都是Public.
如果一个类中有一个构造函数,并且这个构造函数用的Private修饰的,那么这个类是不能实例化的。因为要实例一个类时,必须去调用这个类的构造函数。因此可以写在这个类中写一个静态的方法,在方法中来实例这个类。
方法的重写:
是与参数的个数和参数的类型有关,与返回值没有关系。
说到了类和方法,那么就有必要的说一下变量的作用域了:
是声明这个变量与最近的大括号的内部。
局部变量必须要先赋值后才能够使用。
而类的成员变量是可以不用赋值,就可以先使用,因为构造函数是会初始化这个变量的。
如果在一个方法中声明了一个与类的成员变量相同的变量,那么在使用时,调用类的成员变量要用this 与之区分开,如果不用this 那么方法中的变量要优先于成员变量。This就是表示当前类的对象。
2.对象是什么?
对象就是指某一个具体的事务。在程序中它是类的一个实例。简单的说就是New出来的。
3.面向对象是什么?
面向对象是一种分析问题的方式 主要的作用就是增加程序的可扩展性。
面向对象的优点:
它能够构建与现实世界相对应的问题模型,并保持他们的结构、关系和行为模式。
面向对象的三大特性: 封装、继承、多态。
封装:
就是把事物的状态和行为封装在类中,使用类的人不需要知道类内部是怎么实现的,只要调用其中的属性和方法实现功能就行了。
在程序中封装具体的实现:
- 属性封装了字段。
- 将多个方法封装成一个对象。
- 将一堆代码封装到一个方法中。
- 将一些功能封装到了几个类中。
- 将一些具有相同功能的代码封装到一个程序集中(dll 、exe),并且对外提供统一的访问接口。(例:公司的每个部门的部门经理,与其他部门协作。)
继承:
它是指类与类之间的关系,并且类是不能相互继承的。如果一个类没有显示继承自任何一个类,默认是继承Object类(Object类是所有类的的父类)。如果显示指定了当前类的继承自某个类,则将覆盖默认的Object类。
继承的优点 :
- 代码的重用
- 多态(里氏替换原则LSP)(程序的可扩展性、灵活性),下面说明
- 子类继承父类的属性、方法、字段,使创建子类变得很简单,实瑞了代码的重用,和多态。但要记的子类只能继承父类中非私有的东西。
继承后关于构造函数的问题:
1.类的构造函数是不能被继承的。只能在子类中去调用父类的构造函数。
2.子类的构造函数会默认去调用父类中的无参数的构造函数,当然也可以自己来设置调用父类的哪一个构造函数。
(1)当在父类中写了带参的构造函数,记的要再增加一个无参的构造函数,(这也说明构造函数是可以重载的。)因为当自己在类中写了构造函数会覆盖系统默认的构造函数。
(2)当然也可以在子类的构造函数加上:base(父类构造函数要传的参数),这样就是调用父类中带参数的构造函数了。
3.在当前类的构造函数中去也可以去调用当前类的另一个构造方法。用:this(参数),这样可以少写构造函数里的内容了。
注意:在构造函数中如果用this()就不能再用:base(),相反也是一样的。
当调用从父类中继承过来的成员的时候,如果子类没有重写则this.成员与base.成员是没有区别的。如果子类重写了父类成员,则this.成员,调用的是子类重写以后的。Base.成员,调用的依然是父类的成员。
类的单根继承性:一个子类只能继承一个父类。
类的传递性:子类继承父类的方法和属性等,同时还继承了父类的父类的属性和方法。
重要的特性: 父类对象可以引用子类实例,它编译的是父类对象,但运行却是一个子类对象。具体特征:
被声明为父类对象,拥有父类的属性等,占用子类的内存空间,子类方法覆盖父类的方法时,此时对象调用的是子类的方法;否则自动调用继承父类的方法,也就是说父类不能去调用子类中独有的成员。
关于父类中私有成员是否被继承的问题
个人观点:所有私有成员没有被继承。是指没有办法去访问,并不代表内存中不存在。
例如:儿子继承了父亲的一千万,但不能花。
访问级别的问题:(儿子能去的地方爹一定要能去)
子类的访问级别必须比父类的级别要低或相同。
当前类中的成员的访问级别不能比所对应的类型访问级别高(包括方法的参数。)
多态:
多态就是多种表现的形态, 具体的是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征。
实现多态的主要手段: 1.虚方法virtual, 2抽象方法Abstract 3接口。
虚方法使用:
- 虚方法必须有方法体,当然方法体中可以不写内容
- 子类继承父类,其实父类的虚方法可以重写,也可以不重写。
- 虚方法可以写在普通类中
虚方法与抽象方法的区别:
1.虚方法必须有方法体,抽象方法不能有方法体。
2.抽象方法必须在抽象类中声明,虚方法可以出现在抽象类中也可以在普通类中声明。
3.抽象方法必须在子类中重写,虚方法可以被重写,也可以不重写。
多态的作用:
把不同的子类对象当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
多态的含义:
使得能够利用基类的指针来引用不同子类的对象,以及根据所引用对象的不同,以不同的方式执行相同的操作。
总结的说多态的意义就是为了程序可扩展性,并且节省成本和提高效率。
C#基础篇--面向对象(类与对象)的更多相关文章
- Python之面向对象类和对象
Python之面向对象类和对象 定义一个类:class 定义类的语法: class Test(object): """ 类里定义一类事物共同的技能. 可以是变量,也可是函 ...
- Java面向对象-类与对象
Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建 ...
- Python(四)基础篇之「文件对象&错误处理」
[笔记]Python(四)基础篇之「文件对象&错误处理」 2016-12-08 ZOE 编程之魅 Python Notes: ★ 如果你是第一次阅读,推荐先浏览:[重要公告]文章更新. ...
- [java核心外篇]__Object类与对象类型的转型
前言 我们在之前的学习中提过很多次了,java是面向对象的,java的基础可以说是建立在类和对象上面的.然后我们又学到了类的继承,发现了在java类库中,类的继承是极为普遍的,一个类继承另一个类,就像 ...
- C#核心基础--浅谈类和对象的概念
浅谈类和对象的概念 一.什么是类?什么是对象? 学习一门面向对象编程语言,我们必须得知道什么是类?什么是对象? 类(Class)实际上是对某种类型的对象定义变量和方法的原型.它表示对现实生活中一类具有 ...
- Java面向对象--类和对象
面向对象是相对于面向过程而言的,是软件开发方法.面向对象把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统设计,更贴近事物的自然运行模式.本篇博客介绍Java面向对象的类和对象 目录: 面 ...
- Java面向对象~类和对象&方法,类方法
面向对象 概念: 1.同一类事物的抽象描述,不是具体的 2.类和对象的关系: 类 是抽象的. 对象 是具体的. 3.对象的体征,称为"属性&q ...
- C#编程语言与面向对象——类与对象
由于ASP.NET技术是全面向对象的,因此,要掌握这一技术,必须具备有扎实的面向对象理论基础 使用C#编程,所有的程序代码几乎都放在类中,不存在独立于类中之外的函数,因此,类是面向对象编程的基本单元 ...
- C/C++基础知识总结——类与对象
1. 面向对象程序设计的特点 1.1 抽象 1.2 封装 1.3 继承 1.4 多态 (1) 分为:强制多态.重载多态.类型参数化多态.包含多态 (2) 强制多态:类型转换 重载多态: 类型参数化多态 ...
随机推荐
- javascript的getter和setter(转)
显然这是一个无关IE(高级IE除外)的话题,尽管如此,有兴趣的同学还是一起来认识一下ECMAScript5标准中getter和setter的实现.在一个对象中,操作其中的属性或方法,通常运用最多的就是 ...
- start with connect by prior 递归查询用法,很实用
当开发过程需要查询上下级机构类似的树形机构,还有就是查询当前等级下的所有所属节点 这个子句主要是用于B树结构类型的数据递归查询,给出B树结构类型中的任意一个结点,遍历其最终父结点或者子结点. 先看原始 ...
- 使用Dockerfile制作自己的Docker镜像
一.背景 一直以来的开发流程都是先从Docker Hub中获取到基础镜像,之后在这个镜像的基础上做开发,以满足一定的需求或者提供某种服务,并由此产生新的镜像,然后就可以push到Docker Hub中 ...
- Named function expressions demystified
Introduction Surprisingly, a topic of named function expressions doesn't seem to be covered well eno ...
- Vue 事件驱动和依赖追踪
之前关于 Vue 数据绑定原理的一点分析,最近需要回顾,就顺便发到随笔上了 在之前实现一个自己的Mvvm中,用 setter 来观测model,将界面上所有的 viewModel 绑定到 model ...
- 单片机下载芯片max232,ch340,pl2303,hl340与下载接线
开发板上的下载口位置一般都有很多 340,232等芯片,这些芯片都是干嘛用的呢? 普及:TTL电平 : 二进制电平,+5V等价于逻辑"1",0V等价于逻辑"0&qu ...
- 《阿里巴巴Java开发手册(正式版》读记
前几天,阿里巴巴发布了<阿里巴巴Java开发手册(正式版>,第一时间下载阅读了一番. 不同于一般大厂内部的代码规范,阿里巴巴的这本Java开发手册,可谓包罗万象,几乎日常Java开发中方方 ...
- Android -- 从源码解析Handle+Looper+MessageQueue机制
1,今天和大家一起从底层看看Handle的工作机制是什么样的,那么在引入之前我们先来了解Handle是用来干什么的 handler通俗一点讲就是用来在各个线程之间发送数据的处理对象.在任何线程中,只要 ...
- easyUI中datagrid的使用
easyUI中的datagrid数据表格经常被用到,结合项目中的使用情况,总结一下datagrid使用中需要注意的一些问题.使用datagrid展示数据,需要在html.css.js中都要编写代码,h ...
- mysql主从复制-异步复制
一.创建复制账号: 在Master的数据库中建立一个备份帐户:每个Slave使用标准的MySQL用户名和密码连接master. 进行复制操作的用户会授予REPLICATION SL ...