本篇博客对应视频讲解

回顾

前两篇博文带大家快速的感知一下使用C#编写程序是怎样的过程,能实现什么样的功能。同时也提到了面向对象的概念。本篇文章就是更加详细的去将面向对象编程中常见的概念进行示例说明,以帮助大家更好的理解这种编程模式。

理解面向对象

讲概念的话,最好的方式还是去查看官方的文档,大概目录如下:
基本概念

  • 类和对象

    • 类成员

      • 属性和字段
      • 方法
      • 构造函数
      • 嵌套类
    • 访问修饰符和访问级别
    • 实例化类
    • 静态类和成员
    • 匿名类型
  • 继承
    • 重写成员
  • 接口
  • 泛型
  • 委托

讲概念是我一直不喜欢做的事情,因为概念是总结出来的,是通过大量实践总结出来的。我们应该是先积累经验,然后总结出概念,这样才能更好的去理解。单纯只讲概念,抽象又无法理解,是没什么效果的。

所以,我还是通过实际的示例带大家理解一下相关的概念。建议大家最好观看本篇博客关联的视频。而博客内容就不把这些概念一一"复制"过来了,因为所有的讲解都是基于语言层面上来说明的,对我们理解这些概念并没有什么大的帮助。

继承

就像我们自然界当中分类一样。继承就是一层一层的抽象,从整体到个体的表示。把相同的属性行为抽象出来作为父类,一层一层的直到个体。
动物->猫->橘猫

代码示例:
定义动物类:

    /// <summary>
/// 动物类
/// </summary>
class Animal
{ public string Name { get; set; }
public Animal()
{ }
public Animal(string name)
{
Name = name;
} public virtual void Eat(string sth = "食物")
{
Console.WriteLine($"{Name}吃{sth}");
} }

在定义猫类,继承动物

 class Cat : Animal
{ public string Eye { get; set; } public Cat()
{
Name = "猫";
} public void Sleep()
{
Console.WriteLine($"{Name}在睡觉");
} /// <summary>
/// 改写父类的Eat方法
/// </summary>
/// <param name="sth"></param>
public override void Eat(string sth="食物")
{
if (sth== "甜食")
{
Console.WriteLine($"喵星不吃甜食");
}
else
{
base.Eat(sth);
}
}
}

接口

接口,我们可以理解为定义标准或规范。
比如我们有两个接口,分别是国内规范和国际规范,国内规范中定义一个方法叫VisitChinaInternet(),国际规范定义一个方法叫VisitInternet();
那我们可以定义一个类叫ChinaCitizen,那么这个类继承国内规范。就必需要实现VisitChinaInter()方法。这样就可以使所有的ChinaCitizen通过这个方法去访问互联网,经过防火墙。

代码示例:
定义接口:

    interface IChina
{
/// <summary>
/// 访问国内互联网
/// </summary>
void VisitChinaInternet();
}
interface IWorld
{
/// <summary>
/// 访问互联网
/// </summary>
void VisitInternet();
}

实现接口的类:

    /// <summary>
/// 国内公民
/// </summary>
public class ChinaCitizen : IChina
{
public void VisitChinaInternet()
{
Console.WriteLine("访问国内互联网,无法访问google!");
} public void VisitInternet()
{
Console.WriteLine("访问国际互联网");
}
}
    /// <summary>
/// 世界公民
/// </summary>
class EarthCitizen : IWorld
{
public void VisitInternet()
{
Console.WriteLine("访问国际互联网");
}
}

特别提示:

我们通过现实中的事物去理解编程中抽象的概念,还是需要大家自我实践,亲身去体会。概念不是不重要,而是一个先后顺序的问题。只实践不总结是无法成体系的,难以进步。所以大家看了视频之后,再去看文档,这两者缺一不可。先实践再看概念会有更好理解。

3-C#面向对象概念的更多相关文章

  1. delphi 基础之二 面向对象概念初步

    面向对象概念初步 •类自动生成 快捷键:ctrl+shift+c 1.类的定义 类是用户创建的数据类型,包括状态.表达式和一些操作.有3个组成部分,即字段.方法和属性.字段是类的内部数据变量,方法就是 ...

  2. C#入门(面向对象概念)

    也许是看概念性的东西太多了,所以一看基本就明白,但实际并没有掌握,有待实操.反而是UML(统一建模语言)引起了我的兴趣,发现这东东很像建筑行业的图纸:有标准和约定,很方便专业人士看懂程序的架构和逻辑. ...

  3. O-C相关-03:面向对象概念的具体介绍

    1.面向对象的概念 面向对象(object-oriented ;简称: OO) 至今还没有统一的概念,我这里把它定义为:按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世 ...

  4. 《Java从入门到放弃》JavaSE入门篇:面向对象概念(入门版)

    要知道什么是面向对象,你首先要有个对象吧,所以······没有对象的可以回家洗洗睡了· 好吧,前面是开玩笑,要说明什么是面向对象,我们还是先 例子: 小呆:"小傻,你今天早餐吃的什么?&qu ...

  5. 面向对象【day07】:面向对象概念介绍(二)

    本节内容 1.概念 2.特性 3.面向对象介绍 一丶概念 1.面向对象编程 OOP(Object-Oriented Programming)编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描 ...

  6. Python入门之面向对象编程(一)面向对象概念及优点

    概念 谈到面向对象,很多程序员会抛出三个词:封装.继承和多态:或者说抽象.一切都是对象之类的话,然而这会让初学者更加疑惑.下面我想通过一个小例子来说明一下 面向对象一般是和面向过程做对比的,下面是一个 ...

  7. Java基础教程(4)--面向对象概念

      如果你之前从来没有使用过面向对象编程语言,那么在学习Java之前需要先理解几个有关面向对象编程的基本概念.这篇教程将会向你介绍对象.类.集成.接口和包的概念,以及这些概念是如何与现实世界相关联,并 ...

  8. java面向对象概念1

    一.java面向对象学习的三条主线: 1.java类及类的成员:属性.方法.构造器:代码块.内部类 2.面向对象的三大特征:封装性.继承性.多态性.(抽象性) 3.其它关键字:this.super.s ...

  9. js面向对象概念解析

    ECMAScript有两种开发模式: 1.函数式(过程化) 2.面向对象(OOP). 面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,ECMAScri ...

随机推荐

  1. 529. Minesweeper

    ▶ 扫雷的扩展判定.已知棋盘上所有点的情况(雷区 'M',已翻开空白区 'B',未翻开空白区 'E',数字区 '1' ~ '8'),现在给定一个点击位置(一定在空白区域),若命中雷区则将被命中的 M ...

  2. fabric本地一键部署LAMP

    一.添加普通用户jeff执行sudo时无需输入密码 $ sudo vim /etc/sudoers ---------------------------------------> ## All ...

  3. Hadoop之MapReduce学习笔记(二)

    主要内容: mapreduce编程模型再解释: ob提交方式: windows->yarn windows->local : linux->local linux->yarn: ...

  4. Docker配置mysql互为主从

    配置准备 两台机器 两台机器:A(193.168.10.101)  B(193.168.10.102) 做好ssh免密登录 mysql大版本需要一致,小版本可忽略 并且两台机器已经安装好了docker ...

  5. 2015年传智播客JavaEE 第168期就业班视频教程11-导入配置文件

    资源文件放在Source Folder目录下面,这个目录同样会编译到classes目录下 web.xml的 <listener> <listener-class>org.spr ...

  6. Jmeter中各种参数化设置的方法

    Jmeter中有较多需要参数化测试的地方: 1.从一个用户登录的接口获取登录后的token值,取值后用于后续接口调用 2.获取用户浏览后的cookies信息,需要用到HTTP Cookie 管理器来为 ...

  7. Connection Lifetime

    Connection Lifetime作用(数据库群集)  2010-11-12 14:17:01|  分类: sql server 2005 |  标签: |字号大http://xiangzhang ...

  8. java 数字金额转换中文金额

    public static String digitUppercase(double n){ String fraction[] = {"角", "分"}; S ...

  9. jquery记录

    jquery validate验证框架 参考:http://www.cnblogs.com/linjiqin/p/3431835.html http://www.runoob.com/jquery/j ...

  10. Python操作mysql之模块pymysql

    pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持3.x版本. 本文环境 python3.6.1  Mysql ...