热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

.NET技术汇总(C#)面向对象(OOP)(转载)

转:http:www.cnblogs.comMR-LIUBp3381699.html什么是面向对象(OOP),面向对象有什么作用,有什么好处,面向对象是如何实现的.语言分两种:一种
转:http://www.cnblogs.com/MR-LIUB/p/3381699.html
 

什么是面向对象(OOP),面向对象有什么作用,有什么好处,面向对象是如何实现的.

语言分两种:一种是面向对象一种是面向过程,C#,VB,JAVA等是属于面向语言.C,C++等属于面向过程的语言

面向对象:面向对象语言的产生不是为了取代面向过程,想对于来说面向对象的语言弥补了面向过程中的一些不足.面向对象,对象就是人们要进行研究的任何事物,世上的任何东西对于我们来说都可以叫做对象,面向对象思想比较抽象,所以怎么来理解看个人的想法是什么了

做为开发过程中,怎么来体会面向对象呢,如果之前做过C语言开发的话,就会知道C的编程方式是笼统的从上到下一直到这个功能的实现都是一行一行的向下写,属于一种过程,C#开发的话可以将一个块的功能进行封装,也可以实现类与类之间的相互继承,为了方便程序可扩展性可以使用接口的方式,

这就是面向对象思想核心部分:封装,继承,多态  (接口是属于多态的一种实现,多态是一种抽象的概念,凡是抽象的东西就是不复存在的东西,对吧! 多态就是一种实现方式,什么样的实现方式呢?通过接口,抽象类,虚方法来实现,这就是多态)多态具有一种开发封闭的原则,就是对修改封闭,对扩展开放

================================OK...下面我就来说说面向对象的三大支柱,为了方便理解,另附加代码=======================================

支柱一:   封装:封装就是将事物的状态和行为放在一个类里(类就是一个模子,好比来说狗,猫,猪,马这些都是对象,他们都属于是动物中的一个对象,所以动物就是一个类,一个类具有一些特征(属性)和行为(方法),类是一种数据类型,可以自定义类,所有的类都继承自Object类,object是所有类的父类),Ok.上代码..............

技术分享
技术分享
 1  //属性存值写入,读值
 2             public string Name
 3             {
 4                 get { return _name; }//只读
 5                 set { _name = value; }//只写
 6             }
 7             //方法-----用于实现结果
 8             public void GetAnimal(string name)
 9             {
10                 Console.WriteLine("这个动物的名字叫:" + name);
11             }
技术分享

支柱二:   继承:继承就是子类实现父类的属性和方法,使子类更简单,实现了代码的重用(多态),代码重用又归为两类,一是经典继承("Is-a" 关系)和 包含/委托模型("has-a")一般我们用的都是经典继承的模式,那么什么是经典继承呢??经典继承的思想就是新的类可以利用既有类的功能,允许我们构建新的类的定义,扩展既有类的功能

代码:

技术分享
技术分享
 1  public class Animal     
 2         {
 3             private string _name;
 4 
 5             public string Name
 6             {
 7                 get { return _name; }
 8                 set { _name = value; }
 9             }
10 
11             private string _Type;
12 
13             public string Type
14             {
15                 get { return _Type; }
16                 set { _Type = value; }
17             }
18         }
19 
20         class Dog : Animal    //Dog为派生类(子类) Animal基类(父类)
21         {
22             public void name()
23             {
24                 Console.WriteLine("小狗的名字叫:" + this.Name);
25             }
26             public void type()
27             {
28                 Console.WriteLine("小狗的品种是:" + this.Type);
29             }
30 
31         }
技术分享

其中Animal为基类也叫父类,Gog是派生类也叫子类,子类继承了父类,可以直接使用父类中的属性,另外继承具有单根性,传递性.子类只能继承一个父类,不能继承多个父类,

关于类的访问修饰符:

sealed关键字:如果类的访问修饰符为sealed(密封的),则这个类不能被继承,

private关键字:类中成员的默认访问修饰符

internal关键字:类的默认访问修饰符

pubic关键字:说明这个类是公开的公共的.

protected关键字:说明只能在该类或子类的访问

(静态类不能被继承,也不能实例化.只能通过类型点出来类中的成员)

下面说一下另一个继承模式(has-a)包含/委托模式..从字面上我们也可以看出来这个模式是如何实现的了,在一个类中包含另一个类的对象,实现另一个类的东西....说多就蒙圈了,上代码实在

技术分享
技术分享
 1  public class Animal
 2         {
 3             private string _name;
 4 
 5             public string Name
 6             {
 7                 get { return _name; }
 8                 set { _name = value; }
 9             }
10 
11             private string _Type;
12 
13             public string Type
14             {
15                 get { return _Type; }
16                 set { _Type = value; }
17             }
18 
19             //包含一个cut对象
20             protected Cut cut = new Cut();
21             //公开对象的行为
22             public string str()
23             {
24                 return cut.GetCutName();
25             }
26             //通过自定义属性公开属性
27             public Cut cutname
28             {
29                 get { return cutname; }
30                 set { cutname = value; }
31             }
32         }
技术分享

this和base 关键字:  

this:作为当前类的对象可以调用当前类的成员,使用语法:this.成员(调用成员自己);

                                  调用本类的其他构造函数:this()(调用构造函数,自己);

base:调用父类中的成员在子类重写父类成员或者子类使用new关键字隐藏了父类成员时,base是点不出子类独有成员你的.

        调用父类中的构造函数

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

C# as和is关键字:as和is 都是属于类型之间的一种转换.as判断返回的结果是null来检测兼容性,is判断返回的结果是true或false

支柱三:  多态,多态是整个面向对象的核心部分,在以后的开发中,多态往往用的是最多的也是最难理解的,希望下面的解释可以有助于读者,同时也是为了自己更好的深入的理解它....搜噶...

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

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

多态的实现方式主要有三种:接口,抽象类,虚方法.在开发过程中接口是多态的首选,其次是抽象类,最后选择是虚方法.至于是为什么呢?? 主要是接口的扩展型比抽象类和虚方法要好.当软件封装之后就无法再改动内部的代码,包括类.这样使用接口的话,更好的实现了开放封闭的原则,方便扩展.下面来一一介绍

    抽象类: 抽象类定义的关键字是abstract,如果父类是抽象类的话,那么子类在继承父类之后,如果父类的成员也是抽象的,那么子类必须实现(重写)父类中的成员,除非子类也是抽象类,抽象类不能被实例化,只能被继承,抽象类的存在就是为了多态.

抽象类的声明是abstract,在子类中如果重写父类中的抽象成员要用override.在父类中抽象方法不能有实现.抽象方法必须在抽象类中.

代码上:

技术分享
 1   public abstract class Animal
 2         {
 3             public abstract void name()
 4             {
 5  
 6             }
 7         }
 8        
 9         class Dog : Animal
10         {
11 
12             public override void name()
13             {
14                 Console.WriteLine("这是在重写父类(抽象类)中的抽象成员");
15             }
16         }
技术分享

虚方法:虚方法在父类中必须有实现,虚方法可以定义在普通类中也可以定义在抽象类中,在子类中可以重写父类中的虚方法也可以不重写.根据实际的需求.(多个子类继承同一个父类时,为了实现不同的需求,可以重写父类中的方法.不过最好还是使用抽象方法的方式在子类中实现,这样便于使用).

上代码:

技术分享
 1   //父类可以是普通类也可以是抽象类,在父类中虚方法必须有实现
 2         public  class Animal
 3         {
 4             public virtual void name()
 5             {
 6                 Console.WriteLine("这是一个虚方法");
 7             }
 8         }
 9        
10         class Dog : Animal
11         {
12 
13             public override void name()
14             {
15                 Console.WriteLine("重写父类中的虚方法");
16             }
17         }
技术分享

接口:接口的存在就是为了多态.

接口是为了多态而存在的.接口就是一种协议.接口的定义为Interface,接口里可以有属性,方法,索引器,但是接口中不能有字段,因为接口是一种协议,所以在接口不能有实现,在子类继承接口是,必须要重写接口中的成员.

判断一个指定类型是否支持一个接口可以使用as 和is 来判断.如果判断非空或者为true说明调用的是一个正确的接口引用.

接口可以多继承.

.NET技术汇总(C#)-------面向对象(OOP)(转载)


推荐阅读
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 在编写业务代码时,常常会遇到复杂的业务逻辑导致代码冗长混乱的情况。为了解决这个问题,可以利用中间件模式来简化代码逻辑。中间件模式可以帮助我们更好地设计架构和代码,提高代码质量。本文介绍了中间件模式的基本概念和用法。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
author-avatar
临冬将至
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有