》》简单描述OOP

面向对象编程是由面向过程编程发展而来,不再注重于具体的步骤,而是更多的聚焦于对象。

以对象为载体,然后去完善对象的特点(属性),然后实现对象的具体的功能,同时处理对象与对象之间的关系。

oop有四大特点:抽象,封装,继承,多态

@》封装

被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。一般来说,是把经常用到的功能提取出来,独立成能够共用的代码。

在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。

C# 封装根据具体的需要,设置使用者的访问权限,并通过 访问修饰符 来实现。

一个 访问修饰符eg.public private等 定义了一个类成员的范围和可见性。

@》多态

多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。

@》继承

继承就是派生类可以继承基类的成员变量和成员方法,而且必须在基类之后。

注意格式

  class Tabletop(派生) : Rectangle(基类)

C#中不支持多重继承,但是可以通过接口来实现。

    class Shape            //基类

     public interface PaintCost      //定义一个接口,常接口命令以 I 字母开头。

   class Rectangle : Shape, PaintCost//派生类(接口的实现和类的继承格式类似)

》》重载

重载就是类里面相同方法名,不同形参的情况,可以是形参类型不同或者形参个数不同,或者形参顺序不同,但是不能使返回值类型不同。

一定程度上和多态相关。

》》虚函数

重写和隐藏的定义:

重写:继承时发生,在子类中重新定义父类中的方法,子类中的方法和父类的方法是一样的 例如:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.

在不变动父类的情况下,将此方法改写为适合子类使用情况的方法。

隐藏:基类方法不做申明(默认为非虚方法),在派生类中使用new声明此方法的隐藏。

重写(virtaul)又要注意区分函数的重载,不过不同的是重载的函数之间的名称是一样的,只是参数的不同,对应的函数内部的具体实现也就不同

重写(virtaul)时,定义的变量为父类或子类, 赋值为子类时.  皆调用子类的重写方法;(会从子类中查找有重写则调用, 没则调用基类方法)

隐藏(new)时,定义的变量为父类则调用父类的方法(不管赋值是子类还是父类),定义的变量为子类则调用子类的方法。(使用场景: 当子类想取的一方法名称与父类相同时, 可以使用. 子类的方法与父类的方法相对来说是没有直接的关系(继承,重写==). )

隐藏(new)示例:

using    System;  
   class    A  
   {  
         public    void    F()    
         {  
               Console.WriteLine("A.F");    
         }  
   }  
   class    B:    A  
   {  
         new    public    void    F()    
         {    
               Console.WriteLine("B.F");    
         }  
   }  
   class    Test  
   {  
         static void Main(string[] args)
         {  
               B    b    =    new    B();  
               b.F();  
               A    a    =    b;    
               a.F();  
         }  
   }  
   输出为  
   B.F  
   A.F

重写virtual(虚方法)示例  

using    System;

class    A

{

  public    virtual    void    F()

{

Console.WriteLine("A.F");

}

}

class    B:    A

{

public    override    void    F()

{

Console.WriteLine("B.F");

}

}

class    Test

{

  static    void    Main()

   {

B    b    =    new    B();

    b.F();

    A    a    =    b;

    a.F();

  }

}

输出为      B.F      B.F

》》类与结构

Class可以被实例化,属于引用类型,是分配在内存的堆上的。

Struct属于值类型,是分配在内存的栈上的.

C#学习历程(三)[基础概念]的更多相关文章

  1. 【miscellaneous】 GStreamer应用开发手册学习笔记之基础概念介绍

    第3章. 基础概念介绍 本章将介绍GStreamer的基本概念. 理解这些概念对于你后续的学习非常重要,因为后续深入的讲解我们都假定你已经完全理解了这些概念. 3.1. 元件(Elements) 元件 ...

  2. Elasticserach学习笔记-01基础概念

    本文系本人根据官方文档的翻译,能力有限.水平一般,如果对想学习Elasticsearch的朋友有帮助,将是本人的莫大荣幸. 原文出处:https://www.elastic.co/guide/en/e ...

  3. 基础知识——Cocos2d-x学习历程(三)

    1.场景与流程控制 我们把一些内容相对不变的游戏元素集合称作场景(scene),把游戏在场景之间切换的过程叫做流程控制(flow control). 在Cocos2d-x中,场景的实现是Scene. ...

  4. OpenFlow Switch学习笔记(一)——基础概念

    OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...

  5. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

  6. 记录我的 python 学习历程-Day07 基础数据类型进阶 / 数据类型之间的转换 / 基础数据类型总结 / 编码的进阶

    基础数据类型 str(字符串) str:补充方法练习一遍就行 s.capitalize() 首字母大写,其余变小写 s = 'dyLAn' print(s.capitalize()) # Dylan ...

  7. Centos7安装gitlab11 学习笔记之基础概念、部署安装、权限管理、issue管理

    一.基础介绍 1.简介 一个基于GIT的源码托管解决方案 基于rubyonrails开发 集成了nginx postgreSQL redis sidekiq等组件 2.安装要求 2g内存以上,有点占内 ...

  8. RabbitMQ学习总结(1)-基础概念

    1. 概念 1.1 AMQP协议 AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消 ...

  9. Spring security OAuth2.0认证授权学习第一天(基础概念-认证授权会话)

    这段时间没有学习,可能是因为最近工作比较忙,每天回来都晚上11点多了,但是还是要学习的,进过和我的领导确认,在当前公司的技术架构方面,将持续使用Spring security,暂不做Shiro的考虑, ...

  10. JAVA学习笔记之基础概念(一)

    一.Java 简介: Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称. 由 James Gosling和同 ...

随机推荐

  1. Jmeter使用流程及简单分析监控(转载)

    转载自:https://www.cnblogs.com/linglingyuese/archive/2013/03/04/linglingyuese-one.html#undefined 一.安装Jm ...

  2. 关于URL和http协议,http消息格式

    转自:http://crystal2012.iteye.com/blog/1447845 在WWW(全球资讯网)中想要连结到某个网页,便需要给浏览器一个位址,而URL在此的功能就是告知浏览器某个资源在 ...

  3. 20145314郑凯杰 《Java程序设计》第7周学习总结

    20145314郑凯杰 <Java程序设计>第7周学习总结 教材学习内容总结 首先放上代码托管图片和本地代码图片: 插图4: 插图5: 插图6: 第十三章 时间与日期 13.1 认识时间与 ...

  4. java第四周学习总结

    学号20145336 <Java程序设计>第4周学习总结 教材学习内容总结 继承 继承符合(Don't Repeat Yourself)原则,即在自己的代码中不要重复自己编写的信息,这在多 ...

  5. 百度云如何免费扩容至2055G?

    百度云如何免费扩容至2055G? 上篇说到整一个新的百度账号,那么5G的百度云内存肯定满足不了我们收集癖的需求.那么就来了解一下怎么扩容吧. 主要是在手机端实现的 用这个新的百度账号在手机APP上登录 ...

  6. spring boot2.1读取 apollo 配置中心3

    上篇记录了springboot读取apollo的配置信息,以及如何获取服务端的推送更新配置. 接下来记录一下,如何获取公共namespace的配置. 上文中使用如下代码共聚公共命名空间的配置: @Ap ...

  7. js 光标选中 操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. CA证书,https讲解

    关于具体连接过程,https://blog.csdn.net/wangjun5159/article/details/51510594 这篇博客写的应该比较准确. 我的理解,其中关键的一点是 http ...

  9. DNS和Bind配置指南

    /////////////////////////////目录//////////////////////////////////////一.DNS原理相关二.使用bind搭建最简单的DNS服务器三. ...

  10. ORM框架greenDao 2 (用于了解旧版本的使用方法,目前最新版本为3.2.2,使用注释的方式来生成)

    摘要: Android中对SQLite数据库使用,是一件非常频繁的事情.现今,也有非常多的SQLite处理的开源框架,其中最著名的greenDao,它以占用资源少,处理效率高等特点,成为优秀的ORM框 ...