热门标签 | 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)(转载)


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 如何在WPS Office for Mac中调整Word文档的文字排列方向
    本文将详细介绍如何使用最新版WPS Office for Mac调整Word文档中的文字排列方向。通过这些步骤,用户可以轻松更改文本的水平或垂直排列方式,以满足不同的排版需求。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • Vue 2 中解决页面刷新和按钮跳转导致导航栏样式失效的问题
    本文介绍了如何通过配置路由的 meta 字段,确保 Vue 2 项目中的导航栏在页面刷新或内部按钮跳转时,始终保持正确的 active 样式。具体实现方法包括设置路由的 meta 属性,并在 HTML 模板中动态绑定类名。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文深入探讨了 Java 编程语言的基础,特别是其跨平台特性和 JVM 的工作原理。通过介绍 Java 的发展历史和生态系统,帮助初学者理解如何编写并运行第一个 Java 程序。 ... [详细]
  • MATLAB实现n条线段交点计算
    本文介绍了一种通过逐对比较线段来求解交点的简单算法。此外,还提到了一种基于排序的方法,但该方法较为复杂,尚未完全理解。文中详细描述了如何根据线段端点求交点,并判断交点是否在线段上。 ... [详细]
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社区 版权所有