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


推荐阅读
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • 深入解析Unity3D游戏开发中的音频播放技术
    在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
  • 本文探讨了使用普通生成函数和指数生成函数解决组合与排列问题的方法,特别是在处理特定路径计数问题时的应用。文章通过详细分析和代码实现,展示了如何高效地计算在给定条件下不相邻相同元素的排列数量。 ... [详细]
  • 探讨如何在映射文件中处理重复的属性字段,以避免数据操作时出现错误。 ... [详细]
  • 本文介绍了一个来自AIZU ONLINE JUDGE平台的问题,即清洁机器人2.0。该问题来源于某次编程竞赛,涉及复杂的算法逻辑与实现技巧。 ... [详细]
  • 本文介绍了用户界面(User Interface, UI)的基本概念,以及在iOS应用程序中UIView及其子类的重要性和使用方式。文章详细探讨了UIView如何作为用户交互的核心组件,以及它与其他UI控件和业务逻辑的关系。 ... [详细]
  • 本文探讨了线性表中元素的删除方法,包括顺序表和链表的不同实现策略,以及这些策略在实际应用中的性能分析。 ... [详细]
  • 如何高效渲染JSON数据
    本文介绍了在控制器中返回JSON结果的方法,并详细说明了如何利用jQuery处理和展示这些数据,为Web开发提供了实用的技巧。 ... [详细]
  • ASP.NET 进度条实现详解
    本文介绍了如何在ASP.NET中使用HTML和JavaScript创建一个动态更新的进度条,并通过Default.aspx页面进行展示。 ... [详细]
  • 在项目冲刺的最后一天,团队专注于软件用户界面的细节优化,包括调整控件布局和字体设置,以确保界面的简洁性和用户友好性。 ... [详细]
  • JavaScript 页面卸载事件详解 (onunload)
    当用户从页面离开时(如关闭页面或刷新页面),会触发 onunload 事件,此时可以执行预设的脚本。需要注意的是,不同的浏览器对 onunload 事件的支持程度可能有所不同。 ... [详细]
  • 默认情况下,Git 使用 Nano 编辑器进行提交信息的编辑,但如果您更喜欢使用 Vim,可以通过简单的配置更改来实现这一变化。本文将指导您如何通过修改全局配置文件来设置 Vim 作为默认的 Git 提交编辑器。 ... [详细]
  • 探索Java 11中的ZGC垃圾收集器
    Java 11引入了一种新的垃圾收集器——ZGC,由Oracle公司研发,旨在支持TB级别的内存容量,并保证极低的暂停时间。本文将探讨ZGC的开发背景、技术特点及其潜在的应用前景。 ... [详细]
  • 在Notepad++中配置Markdown语法高亮及实时预览功能
    本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ... [详细]
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社区 版权所有