》》简单描述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. [Python]返回函数,装饰器拾遗

    def lazy_print(*args): def pr(): print(args) return pr 当我们调用lazy_print()时,返回的并不是求和结果,而是求和函数: >> ...

  2. CSS3、SVG、Canvas、WebGL动画精选整理

    一.CSS3动画 名称 用途 链接 阴影波纹特效 1.元素hover效果 2.突出表现效果 http://www.jq22.com/code80 横板导航菜单动画 导航菜单 http://www.jq ...

  3. httpd sshd firewalld 很多服务后面的d是什么意思

    在操作系统中,一般系统的服务都是以后台进程的方式存在,而且都会常驻系统中,直到关机才结束.这类服务也称Daemon,在Linux系统中就包含许多的Daemon. 判断Daemon最简单的方法就是从名称 ...

  4. 利用Masscan批量生成随机ip地址表

    简介 Masscan是Kali下集成的高效扫描器,和nmap命令有很多相似之处 命令生成随机ip masscan -sL 10.0.0.0/24 > c段.txt masscan -sL 10. ...

  5. MySQL的索引是什么?怎么优化?

    索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本.MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的.My ...

  6. centos 最新版git 致命错误: zlib.h:没有那个文件或目录

    遇到此类问题通常是缺少对应的库文件. 由于yum install是老版本的git 还是1.8的 如果需要安装新版本的git,官方给出的url:https://git-scm.com/download/ ...

  7. raid 简单了解

    独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks ...

  8. 转载:vsftp中的local_umask和anon_umask

    转载出处:http://blog.sina.com.cn/s/blog_67c5699001010e3e.html umask是unix操作系统的概念,umask决定目录和文件被创建时得到的初始权限u ...

  9. 【读书笔记】《深入浅出nodejs》第五章 内存控制

    海量请求+长时间运行 -> 内存控制 -> 一切资源高效循环利用 1. V8的垃圾回收机制与内存限制 在Node中通过JavaScript使用内存时,只能使用部分内存(64位系统下约1.4 ...

  10. CentOS7系统安装及环境初始化

    操作系统安装:    将网卡名称设置为eth*,不使用CentOS 7默认的网卡命名规则.所以需要在安装的时候,增加内核参数.1. 光标选择“Install CentOS 7” 2. 点击Tab,打开 ...