继承,多态,封装

在C#中,为了能够合理描述自然界的规律,面向对象的编程引入了继承的概念,是面向对象编程中最重要的概念之一,定义了如何根据现有的类创建新类的过程.

继承:一个类派生出来的子类具有这个类所有的公共属性和方法。

父类派生子类,子类继承父类。

语法-- 子类父类

子类和父类

被继承的类称为父类或基类,继承其他类的类称为子类或派生类,子类不仅具有自己的独有的成员,还有父类的成员。

Is a 的应用

在两个类中建立继承关系必须符合is a 的关系(例:小型卡车 is a 卡车,卡车is a 汽车,小型卡车is a汽车)

里氏替换原则:子类可以替换父类,但父类不可以替换子类对象。

只有当子类可以替换父类时,软件功能不受影响,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。

Is  as操作符的使用

Is 操作符用于检查对象和制定的类型是否兼容。

As 操作符主要用于两个对象之间的类型转换

继承的特性

继承有传递性(子类能派生子类)和单根性(一个子类不能同时继承多个父类)

Base关键字和protected修饰符

base:表示父类,用于调用父类里的成员。

Protected:修饰父类成员,只允许子类调用和类的本身内部访问,不允许其他非子类访问。

修饰符的区别:

Public:任何类都可以访问。

Private:任何类都不可以访问。

Protected:只能由类的本身该类的子类内部访问,其他任何类不可以访问

子类构造函数:

任何子类都继承父类的公共无参构造函数,父类的其他构造函数不会被继承,只能在子类中声明相同签名的构造函数并用base显示调用。

子类的构造函数肯定会调用父类的构造函数,先执行父类中的构造函数在执行子类中的构造函数。

隐式调用父类中的构造函数:

子类(没有指明的情况下)调用父类中系统默认的一个无参构造函数。

显示掉用父类中的构造函数

在子类指明的情况下用base关键字调用父类的某一个构造函数,实现属性的初始化,然后在子类本身的构造函数中完成对子类特有的属性初始化。如果子类没有指明调用父类里手动创建的哪个构造函数时系统就会调用父类中手动创建的无参的构造函数,若是没有系统将会报错。

Public SE(string  name);  =  Public SE(string  name):base();

注:用base调用父类构造函数时,只能传递参数。

多态

多态:两个或多个属于不同类的对象,对于同一个消息(方法调用)作出不同响应的方式。

多态是建立在继承的基础上的,没有继承就没有多态。

实现多态

以父类类型作为参数:可以接受他的子类类型,程序在运行中自动判断实际参数属于哪种子类,调用子类的方法从而实现多态。

我们通过虚方法和抽象方法在继承的基础上实现多态(通过重写父类的方法,完成自己的方法)。

虚方法:实现方法重写。通过关键字Virtual来定义一个虚方法(父类中),用Override修饰来重写这个虚方法(子类中)。

语法:访问修饰符 virtual 返回值类型 方法名()

{

//方法体

}

用虚方法 实现多态:

1.子类重写父类的虚方法

两种方式:1.创建父类变量用子类对象实例化这个父类变量

2.把父类类型作为参数,它的子类对象作为参数传入

2.运行时,根据实际创建的对象决定执行哪个方法

抽象方法: 是一个没有实现的方法,这些方法只能定义,通过在定义方法时加上关键字abstract可以声明一个抽象方法(父类中),用Override来重写这个抽象方法(重写)。

语法:访问修饰符 sbstract返回值类型 方法名();

注:抽象方法中没有方法体。

抽象方法的应用:定义抽象方法必须在非抽象的子类中去实现,抽象方法必须定义在抽象类中。

抽象类:用sbstract修饰的类都是抽象类。抽象类是抽象的概念,抽象类提供抽象方法要求继承他的子类去实现,通过这些抽象方法来约束子类的行为,有抽象的方法的类必然是抽象类,抽象类中不一定只能有抽象方法。

抽象类不能被实例化,也不能是密封和静态的

抽象方法和虚方法都是通过override重写父类的方法来实现多态。

注:重写父类的语法:方法名、参数列表,返回值一样

(方法重载是在一个类中完成,方法名相同,参数个数和参数类型不同,并且和返回值无关)

二者之间的区别:

抽象方法:

用abstract关键字修饰,

没有方法体,

必须被override重写,

只能在抽象类中写。

虚方法:

用virtaul关键字修饰有方法体

可以被override重写,

也可以不被override重写

面向对象思想

封装:保证对象自身数据的完整性和安全性。

继承:建立类之间的关系,实现代码复用,方便系统扩展。

多态:相同的方法调用可实现不同的实现方式。

面向对象高级应用 

设计模拟式

在软件工程中把对象的依赖性叫做耦合,而一个模块内部各个元素彼此之间的联系叫做内聚。软件工程中推崇“高内聚”,“低耦合”的设计。

设计模式概念:某些特定问题经过实践检验的特定的解决方法。

设计模式就像古代的《三十六计》一样。设计模式就是人们在软件

开发中对一些经验的总结。

面向对象设计模式是可复用面向对象软件的基础

简单工厂设计模式:创建简单工厂就是吧变化点封装起来,在类的内部对代码执行增加修改通过定义一个父类类型的方法返回父类类型子类对象,这个方法体内实例的子类根据方法传的参数来进行创建。

简单工厂设计模式降低了类与类之间的耦合性极大地减少了客户程序的修改,使程序扩展性能大大增强(使客户程序基本不需改动),但简单工厂也有一定的局限性。

单例设计模式:将产生实例的方法在类部,通过一个静态方法返回它的实例。(在类中把构造函数设为私有的)

私有构造函数:一种特殊的构造函数,通常只包含静态成员的类中,如果一个类中只有私有的构造函数没有公共得构造函数的话,则其他类将无法访问该类的实例。

单例设计模式特点:

1.     私有构造函数。

2.     2.保存唯一的静态的私有变量。

3.     获取唯一实例的静态方法。

应用单例设计模式:当类只能有一个实例存在,并且可以在全局访问可以使用单例设计模式。

简单工厂模式应用:简单工厂模式试用于客户程序不需要知道所创建的对象到底属于哪个子类,所要创建的对象需要变化,因此把这些变化封装到工厂之内。

软件的设计以需求为基础,所以要适当的情况下选用适当的设计模式。

C# OO(初级思想)相关推荐

  1. C# OO(初级思想)。

    继承,多态,封装 在C#中,为了能够合理描述自然界的规律,面向对象的编程引入了继承的概念,是面向对象编程中最重要的概念之一,定义了如何根据现有的类创建新类的过程. 继承:一个类派生出来的子类具有这个类 ...

  2. OO开发思想:面向对象的开发方法(Object oriented,OO)

    面向对象的开发方法(Object oriented,OO)认为是好文章吧,拿来分享一下(转载) 面向对象的开发方法(Object oriented,OO) 从事软件开发的工程 师们常常有这样 的体会: ...

  3. OO第四单元博客作业

    一.UML作业架构设计 1.第一次作业 其中 Main 是入口类,MyUmlinteraction实现了接口,UmlInteractionBase为MyUmlinteraction实现提供了底层功能, ...

  4. 简单解释op(面向过程procedure- oriented)与oo(面向对象object-oriented)

    一句话概括: op是具体作为模块的拼凑. oo是抽象作为模块的组合. 比如我们制作一样东西,而这样东西是用很多小东西拼在一起形成的,在这里我们如果使用一个造车的小例子来解释一下op与oo思想. 1.o ...

  5. OO,OO以后,及其极限

    1.什么是软件开发? 软件开发的过程就是人们使用各种计算机语言将人们关心的现实世界映射到计算机世界的过程: 现在的计算机的数学理论基础是由计算机的开山鼻祖,大名鼎鼎的图灵于1937年提出的图灵机模型. ...

  6. 请用面向对象的思想,谈一谈这次面试的过程

    01. 很久没有思考过什么是面向对象这个问题了,就好像很久没有吃过烤红薯一样,那股香味究竟是什么,已经很难准确地形容出来了.脑海中只浮现出这样一幅动图: 前两天,读者秋秋问我: 二哥,究竟什么是面向对 ...

  7. OO,OO以后,及其极限(转)

    1.什么是软件开发? 软件开发的过程就是人们使用各种计算机语言将人们关心的现实世界映射到计算机世界的过程: 现在的计算机的数学理论基础是由计算机的开山鼻祖,大名鼎鼎的图灵于1937年提出的图灵机模型. ...

  8. 敲响OO时代的丧钟!

    一.基本概念 1.软件与硬件的区分 "拜托!"肯定有朋友会说:"我们都是X年的老程序员了,就算水平不是出类拔萃,至少软件硬件总是分得清的!"那么什么是& ...

  9. OO,OO以后,及其极限(1)

    1.什么是软件开发? 软件开发的过程就是人们使用各种计算机语言将人们关心的现实世界映射到计算机世界的过程: 现在的计算机的数学理论基础是由计算机的开山鼻祖,大名鼎鼎的图灵于1937年提出的图灵机模型. ...

最新文章

  1. Linux学习中我的10条建议和技巧
  2. Android AndFix热补丁动态修复框架使用教程
  3. python爬虫框架实例项目_python爬虫框架scrapy实例详解
  4. teach-es6-2(class)
  5. boost::mp11::mp_map_insert相关用法的测试程序
  6. ajax创建对象,ajax创建对象
  7. gan pytorch 实例_GaN教程(1)|美国宜普(EPC)公司推出“如何使用氮化镓器件”系列视频教程,讲授GaN功率晶体管和集成电路设计的方方面面...
  8. 前端学习(2476):表单数据绑定处理
  9. c语言CString转数字函数,CString与16进制的CByteArray之间相互转化
  10. Spring boot 日志框架
  11. python模块使用教程详解_python之mock模块基本使用方法详解
  12. 安卓输入法 车机版_搜狗输入法车机下载安装-搜狗输入法车载版下载v10.10.1 安卓版-单机手游网...
  13. DELPHI盒子FTP登录地址及用户密码
  14. 强化学习6——policy gradient的优化( Use temporal causality,Baseline and Critic)
  15. 全球及中国等离子电视行业市场销售量调研及未来发展展望报告2022-2027年
  16. HyperDAO跨链搭桥:启动万链自由交换时代
  17. Windows进不去系统(蓝屏、黑屏、BIOS更新等无法开机的情况),试试这几种解决办法
  18. To install it ,you can run npm i -- save vuetypesumd
  19. 什么是AOP? AOP .Net 框架,AOP 资源
  20. python 学习笔记第一篇---下载网页内所有图片

热门文章

  1. ASP.NET怎么防止多次点击提交按钮重复提交
  2. oracle提高io,【转】Oracle性能优化调整--调整磁盘I/O
  3. mysql5.6 pt-query-digest,分析pt-query-digest输出信息
  4. 如何知道自己的研究课题是不是领域热点?
  5. javaee实验报告心得_准大四学生七月青软实训总结
  6. HTML+CSS+JavaScript复习笔记持更(十)——CSS3常用属性之定位
  7. 页面升紧急级访问_部落冲突10-13本 发育规划丨升什么性价比最高?
  8. bind()和connect()函数:绑定套接字并建立连接
  9. VC小技巧汇总之对话框技巧
  10. C++ pair(对组)用法