• 30天C#基础巩固-----多态,工厂模式


         自己要有自信,相信自己可以找到好的工作。面对校招,企业更加看重自己的基础,这30天就把C#的基础好好的复习,学习下。笔记一定要认真的记录,这样自己复习回顾的时候就有了可以参考的东西了。

    一:多态

        在面向对象编程中不好理解的就是多态了,很多时候我们只是会使用,但是具体的知识点还不是很透彻,通过下面的示例来学习下多态。

       什么是多态:

           一个东西(类)在不同的场景下,展示的不同作用(多种状态)。

           对象在调用同一个方法的时候表示出多种状态。

    这个可以使用父类和子类来更好的区别。<父类统一调用,子类具体实现>

        class Person
        {
            public void PersonInfo()
            {
                Console.WriteLine("首先,我是个人");
            }
        }
        class ManPerson : Person
        {
            public  void PersonInfo()
            {
                Console.WriteLine("我是个男人");
            }
        }
    
        class WomenPerson : Person
        {
            public  void PersonInfo()
            {
                Console.WriteLine("女人");
            }
        }

    定义了一个父类,两个子类。

            static void Main(string[] args)
            {
                
                ManPerson s =new ManPerson();  //定义一个男人。
                s.PersonInfo();                              //方法是男人。
                Person p = s;                              //赋值给了人。
                p.PersonInfo();                           //方法是人。
                Console.ReadKey();
            }

    这里我们可以看到当这个PersonInfo是那个类型的时候,就会调用那个方法。在不同的场景下,拥有不同的表示。

    这里可以在子类中使用new来隐藏父类中的方法,当调用子类的方法时,方法是子类的,父类的被隐藏了。

    之前讲解的是我们使用new来隐藏,下面是通过override和virtual来看我们的多态。

        class Person
        {
            public virtual void PersonInfo()
            {
                Console.WriteLine("首先,我是个人");
            }
        }
        class ManPerson : Person
        {
            public override  void PersonInfo()
            {
                Console.WriteLine("我是个男人");
            }
        }
    
        class  WomenPerson : Person
        {
            public override void PersonInfo()
            {
                Console.WriteLine("女人");
            }
        }

    virtual:表示我们父类的方法可以被子类重写。override:表示我们子类重写父类的方法。

                Person p = null;              //定义一个人.
                p=new ManPerson();      //利用子类实现不同的意义
                  p.PersonInfo();              //统一调用父类的方法。
                  Console.ReadKey();

    image

    二:工厂模式

        我们把一些复杂的东西,放在一起通过一个工具或者一个方法来实现它,就相当于工厂一样我们可以做很多的事情,我们的代码就是可以放在工厂里面,这样就可以来实现具体的功能,外面不用管我是如何实现的,只需要调用工厂就可以。

    案列:USB设备,usb风扇,usb鼠标,通过类库和工厂来实现。

    工厂:

        /// <summary>
        /// usb工厂,这里主要看用户填写的是几,来判断使用那个方法。
        /// </summary>
        public class UsbFactory
        {
            public static UsbFac CreateInstance(string type)
            {
                switch (type)
                {
                    case "1":return new Mouse();                    
                    case "2":return new UsbF();
                    default:
                        return null;
                }
            }
        }

    usb父类:

        public class UsbFac
        {
            public virtual  void Insert()
            {
                Console.WriteLine("usb设备----");
            }
        }

    两个子类:

        public class UsbF : UsbFac
        {
            public override void Insert()
            {
                Console.WriteLine("usb----风扇转起来了");
            }
        }
        public class Mouse:UsbFac
        {
            public override void Insert()
            {
                Console.WriteLine("usb-----鼠标用起来");
            }
        }

    main方法:

            static void Main(string[] args)
            {
                Console.WriteLine("请选择?");
                string type = Console.ReadLine();
                UsbFac s= UsbFactory.CreateInstance(type);
                if (s!=null)
                {
                     s.Insert();
                }
                else
                {
                    Console.WriteLine("不识别设备");
                }
                Console.ReadKey();
            }

    这样做的好处是我们日后更好的维护项目。

    多态的理解就到这里,这个还是需要在项目中去慢慢的学习理解。

    一个长期的学习方法:

         image

    自己也要使用这个方法看以前做过的项目,看里面老大写的方法,是如何写的,如何用的。

  • 相关阅读:
    xml=>数组
    php的session锁
    压缩服务器中的文件夹,并下载到电脑
    通过onkeydown事件来控制只允许数字
    简单算法
    memcahe安装
    HTML div css 强制 换行 不换行
    windows charles response 乱码解决办法
    根据字节流判断内容是否使用UTF-8编码
    nginx安装过程
  • 原文地址:https://www.cnblogs.com/netxiaohui/p/5516231.html
Copyright © 2020-2023  润新知