1.类是什么?

   类就相当于模板,就是把同一类的事物的共同特征进行的抽象。

  类的创建和说明:

    类是先根据一些具体的对象(实体的东西)来抽象出来的共同的特性,然后用代码来表示. 

    在类中,用数据表示事物的状态,用函数(方法)实现事物的行为动作。

    当创建一个类时,系统会默认的添加一个构造函数,如果用户自己写一个构造函数则会覆盖这个默认的构造函数。当然构造函数也是可以重载的。

    构造函数的特点:

    1. 构造函数名必须与类名相同。
    2. 不能有任何的返回值类型。
    3. 访问修饰符一般都是Public.

      如果一个类中有一个构造函数,并且这个构造函数用的Private修饰的,那么这个类是不能实例化的。因为要实例一个类时,必须去调用这个类的构造函数。因此可以写在这个类中写一个静态的方法,在方法中来实例这个类。    

    方法的重写:

          是与参数的个数和参数的类型有关,与返回值没有关系。

 说到了类和方法,那么就有必要的说一下变量的作用域了:  

      是声明这个变量与最近的大括号的内部。

      局部变量必须要先赋值后才能够使用。

      而类的成员变量是可以不用赋值,就可以先使用,因为构造函数是会初始化这个变量的。

      如果在一个方法中声明了一个与类的成员变量相同的变量,那么在使用时,调用类的成员变量要用this 与之区分开,如果不用this 那么方法中的变量要优先于成员变量。This就是表示当前类的对象。

2.对象是什么?

  对象就是指某一个具体的事务。在程序中它是类的一个实例。简单的说就是New出来的。

3.面向对象是什么?

  面向对象是一种分析问题的方式 主要的作用就是增加程序的可扩展性。

面向对象的优点:

    它能够构建与现实世界相对应的问题模型,并保持他们的结构、关系和行为模式。  

  面向对象的三大特性: 封装、继承、多态。

    封装:  

    就是把事物的状态和行为封装在类中,使用类的人不需要知道类内部是怎么实现的,只要调用其中的属性和方法实现功能就行了。

    在程序中封装具体的实现:

    1.   属性封装了字段。
    2.   将多个方法封装成一个对象。
    3.   将一堆代码封装到一个方法中。
    4.   将一些功能封装到了几个类中。
    5.   将一些具有相同功能的代码封装到一个程序集中(dll 、exe),并且对外提供统一的访问接口。(例:公司的每个部门的部门经理,与其他部门协作。)

    继承:

     它是指类与类之间的关系,并且类是不能相互继承的。如果一个类没有显示继承自任何一个类,默认是继承Object类(Object类是所有类的的父类)。如果显示指定了当前类的继承自某个类,则将覆盖默认的Object类。    

    继承的优点 :

    1.   代码的重用
    2.   多态(里氏替换原则LSP)(程序的可扩展性、灵活性),下面说明
    3. 子类继承父类的属性、方法、字段,使创建子类变得很简单,实瑞了代码的重用,和多态。但要记的子类只能继承父类中非私有的东西。

    继承后关于构造函数的问题:      

      1.类的构造函数是不能被继承的。只能在子类中去调用父类的构造函数。

      2.子类的构造函数会默认去调用父类中的无参数的构造函数,当然也可以自己来设置调用父类的哪一个构造函数。

    (1)当在父类中写了带参的构造函数,记的要再增加一个无参的构造函数,(这也说明构造函数是可以重载的。)因为当自己在类中写了构造函数会覆盖系统默认的构造函数。

    (2)当然也可以在子类的构造函数加上:base(父类构造函数要传的参数),这样就是调用父类中带参数的构造函数了。

      3.在当前类的构造函数中去也可以去调用当前类的另一个构造方法。用:this(参数),这样可以少写构造函数里的内容了。

      注意:在构造函数中如果用this()就不能再用:base(),相反也是一样的。

    

      当调用从父类中继承过来的成员的时候,如果子类没有重写则this.成员与base.成员是没有区别的。如果子类重写了父类成员,则this.成员,调用的是子类重写以后的。Base.成员,调用的依然是父类的成员。      

      类的单根继承性:一个子类只能继承一个父类。

      类的传递性:子类继承父类的方法和属性等,同时还继承了父类的父类的属性和方法。

      重要的特性: 父类对象可以引用子类实例,它编译的是父类对象,但运行却是一个子类对象。具体特征:

被声明为父类对象,拥有父类的属性等,占用子类的内存空间,子类方法覆盖父类的方法时,此时对象调用的是子类的方法;否则自动调用继承父类的方法,也就是说父类不能去调用子类中独有的成员。      

      关于父类中私有成员是否被继承的问题

      个人观点:所有私有成员没有被继承。是指没有办法去访问,并不代表内存中不存在。

      例如:儿子继承了父亲的一千万,但不能花。

      访问级别的问题:(儿子能去的地方爹一定要能去)

子类的访问级别必须比父类的级别要低或相同。

当前类中的成员的访问级别不能比所对应的类型访问级别高(包括方法的参数。)

     

    多态:

     多态就是多种表现的形态, 具体的是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征。    

     实现多态的主要手段: 1.虚方法virtual, 2抽象方法Abstract 3接口。

      虚方法使用:

      1.     虚方法必须有方法体,当然方法体中可以不写内容
      2.     子类继承父类,其实父类的虚方法可以重写,也可以不重写。
      3.     虚方法可以写在普通类中

     

      虚方法与抽象方法的区别:

        1.虚方法必须有方法体,抽象方法不能有方法体。

        2.抽象方法必须在抽象类中声明,虚方法可以出现在抽象类中也可以在普通类中声明。

        3.抽象方法必须在子类中重写,虚方法可以被重写,也可以不重写。

    

    多态的作用:
      把不同的子类对象当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

    多态的含义:
      使得能够利用基类的指针来引用不同子类的对象,以及根据所引用对象的不同,以不同的方式执行相同的操作。

    总结的说多态的意义就是为了程序可扩展性,并且节省成本和提高效率。  

C#基础篇--面向对象(类与对象)的更多相关文章

  1. Python之面向对象类和对象

    Python之面向对象类和对象 定义一个类:class 定义类的语法: class Test(object): """ 类里定义一类事物共同的技能. 可以是变量,也可是函 ...

  2. Java面向对象-类与对象

    Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建 ...

  3. Python(四)基础篇之「文件对象&错误处理」

    [笔记]Python(四)基础篇之「文件对象&错误处理」 2016-12-08 ZOE    编程之魅  Python Notes: ★ 如果你是第一次阅读,推荐先浏览:[重要公告]文章更新. ...

  4. [java核心外篇]__Object类与对象类型的转型

    前言 我们在之前的学习中提过很多次了,java是面向对象的,java的基础可以说是建立在类和对象上面的.然后我们又学到了类的继承,发现了在java类库中,类的继承是极为普遍的,一个类继承另一个类,就像 ...

  5. C#核心基础--浅谈类和对象的概念

    浅谈类和对象的概念 一.什么是类?什么是对象? 学习一门面向对象编程语言,我们必须得知道什么是类?什么是对象? 类(Class)实际上是对某种类型的对象定义变量和方法的原型.它表示对现实生活中一类具有 ...

  6. Java面向对象--类和对象

    面向对象是相对于面向过程而言的,是软件开发方法.面向对象把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统设计,更贴近事物的自然运行模式.本篇博客介绍Java面向对象的类和对象 目录: 面 ...

  7. Java面向对象~类和对象&方法,类方法

    面向对象 概念:     1.同一类事物的抽象描述,不是具体的    2.类和对象的关系:        类 是抽象的.        对象 是具体的.    3.对象的体征,称为"属性&q ...

  8. C#编程语言与面向对象——类与对象

    由于ASP.NET技术是全面向对象的,因此,要掌握这一技术,必须具备有扎实的面向对象理论基础 使用C#编程,所有的程序代码几乎都放在类中,不存在独立于类中之外的函数,因此,类是面向对象编程的基本单元 ...

  9. C/C++基础知识总结——类与对象

    1. 面向对象程序设计的特点 1.1 抽象 1.2 封装 1.3 继承 1.4 多态 (1) 分为:强制多态.重载多态.类型参数化多态.包含多态 (2) 强制多态:类型转换 重载多态: 类型参数化多态 ...

随机推荐

  1. javascript的getter和setter(转)

    显然这是一个无关IE(高级IE除外)的话题,尽管如此,有兴趣的同学还是一起来认识一下ECMAScript5标准中getter和setter的实现.在一个对象中,操作其中的属性或方法,通常运用最多的就是 ...

  2. start with connect by prior 递归查询用法,很实用

    当开发过程需要查询上下级机构类似的树形机构,还有就是查询当前等级下的所有所属节点 这个子句主要是用于B树结构类型的数据递归查询,给出B树结构类型中的任意一个结点,遍历其最终父结点或者子结点. 先看原始 ...

  3. 使用Dockerfile制作自己的Docker镜像

    一.背景 一直以来的开发流程都是先从Docker Hub中获取到基础镜像,之后在这个镜像的基础上做开发,以满足一定的需求或者提供某种服务,并由此产生新的镜像,然后就可以push到Docker Hub中 ...

  4. Named function expressions demystified

    Introduction Surprisingly, a topic of named function expressions doesn't seem to be covered well eno ...

  5. Vue 事件驱动和依赖追踪

    之前关于 Vue 数据绑定原理的一点分析,最近需要回顾,就顺便发到随笔上了 在之前实现一个自己的Mvvm中,用 setter 来观测model,将界面上所有的 viewModel 绑定到 model ...

  6. 单片机下载芯片max232,ch340,pl2303,hl340与下载接线

    开发板上的下载口位置一般都有很多 340,232等芯片,这些芯片都是干嘛用的呢? 普及:TTL电平    : 二进制电平,+5V等价于逻辑"1",0V等价于逻辑"0&qu ...

  7. 《阿里巴巴Java开发手册(正式版》读记

    前几天,阿里巴巴发布了<阿里巴巴Java开发手册(正式版>,第一时间下载阅读了一番. 不同于一般大厂内部的代码规范,阿里巴巴的这本Java开发手册,可谓包罗万象,几乎日常Java开发中方方 ...

  8. Android -- 从源码解析Handle+Looper+MessageQueue机制

    1,今天和大家一起从底层看看Handle的工作机制是什么样的,那么在引入之前我们先来了解Handle是用来干什么的 handler通俗一点讲就是用来在各个线程之间发送数据的处理对象.在任何线程中,只要 ...

  9. easyUI中datagrid的使用

    easyUI中的datagrid数据表格经常被用到,结合项目中的使用情况,总结一下datagrid使用中需要注意的一些问题.使用datagrid展示数据,需要在html.css.js中都要编写代码,h ...

  10. mysql主从复制-异步复制

    一.创建复制账号:      在Master的数据库中建立一个备份帐户:每个Slave使用标准的MySQL用户名和密码连接master.      进行复制操作的用户会授予REPLICATION SL ...