zoukankan      html  css  js  c++  java
  • 3C#面向对象概念

    本篇博客对应视频讲解

    回顾

    前两篇博文带大家快速的感知一下使用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("访问国际互联网");
            }
        }
    

    特别提示:

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

  • 相关阅读:
    Cloudera Manager安装之利用parcels方式安装3或4节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(五)
    Cloudera Manager安装之利用parcels方式安装单节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(四)
    Cloudera Manager安装之Cloudera Manager 5.3.X安装(三)(tar方式、rpm方式和yum方式)
    Cloudera Manager安装之时间服务器和时间客户端(二)
    Cloudera Manager安装之Cloudera Manager安装前准备(CentOS6.5)(一)
    Cloudera Manager架构原理
    Cloudera Manager是啥?主要是干啥的?
    HDU-1664-Different Digits(BFS)
    AdapterView&lt;?&gt; arg0, View arg1, int arg2, long arg3參数含义
    c++11 新特性之 autokeyword
  • 原文地址:https://www.cnblogs.com/msdeveloper/p/9773789.html
Copyright © 2011-2022 走看看