zoukankan      html  css  js  c++  java
  • C#基础:抽象类和抽象方法实现多态以及简单工厂设计模式的语法

    首先应注意一下问题:

    1,抽象方法不能有方法体;例如:public  abstract  void  Show();

    2,抽象成员必须在抽象类中;

    3,父类中的抽象成员子类继承以后要重写或者就是子类也是一个 抽象类

    4,抽象成员不能用private的访问修饰符

    5,抽象类不能被实例化(抽象类的做用就是为了让继承的)

    6,抽象类中可以包含实例成员或构造函数

    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

    如果父类中的方法体幽默人的实现并且需要实例化那么此时用虚方法实现多态;

    例如:

    public   class jisuanji
        {
           public virtual void Write()
           {
               Console.WriteLine("xie");//虚方法
           }
           public virtual  void Read()
           {
               Console.WriteLine("du");//虚方法
           }
        }
       class Upan : jisuanji
       {
           public override void Write()
           {
               Console.WriteLine("upan的写");//重写虚方法
           }
           public override void Read()
           {
               Console.WriteLine("upan");
           }
        
           }

    如果父类中的方法体没有默认的实现并且不需要实例化那么此时可以定义为抽象类通过抽象类来实现多态;

    例如:

     public abstract  class jisuanji   

      {    

        public abstract void Write();//这里是抽象方法

           public abstract void Read();       

                     }  

      class Upan : jisuanji   //子类继承父类但子类是普通类不是抽象类所以要把父类里面所有的抽象成员重写

    {       

    public override void Write()    

        {          

      Console.WriteLine("upan的写");   //重写父类中的抽象方法

         }       

    public override void Read()        {     

           Console.WriteLine("upan");

           }            

    }

    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

    new关键字

    如果父类中的一个方法在子类中加关键字new 就是全新的重写了这个方法同是把从父类中继承的这个方法给隐藏了

    例如:

     public   class jisuanji
        {
           public  void Write()
           {
               Console.WriteLine("xie");
           }
         
        }
       class Upan : jisuanji
       {
           public new void Write()//此时就是把父类中的Write方法给隐藏了在主函数中调用子类的方法就是这个而继承的那个方法就被给隐藏了
           {
               Console.WriteLine("upan的写");
           }

    }

    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

    简单工厂的设计模式

    例如:

     public  abstract  class jisuanji//抽象类
        {
           public abstract void Write();//抽象方法
        }
       class Upan : jisuanji//继承抽象类
       {
           public override  void Write()
           {
               Console.WriteLine("upan的写");//重写方法
           }

    }

     class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("输入内容");
                string str = Console.ReadLine();
                jisuanji p= Show(str);//参数传进简单工厂的方法中返回的是父类类型的对象
                p.Write();//这里就是多态调用子类中的方法
                Console.ReadKey();
            }
            static jisuanji Show(string str)//简单工厂返回的是父类的类型
            {
                jisuanji p = null;//抽象类不能实例化因此把null给它
                switch (str)
                {
                    case "upan"://case的值为upan的时候执行下面
                        p=new Upan();//这是子类的一个实例化对象
                        break;
                }
                return p;//返回的是子类的实例化对象子类可以隐式转换成父类
            }
        }

  • 相关阅读:
    几个Tab,滑动门,选项卡,图片切换
    超多的CSS3圆角渐变网页按钮
    B2B(企业对企业)、B2C(企业对个人)、C2C(个人对个人)
    如何获取一个数据库的所有建表语句与创建索引的语句?
    Linux学习笔记(7)CRT实现windows与linux的文件上传下载
    (4.17)sql server中的uuid获取与使用
    【等待优化】SQL SERVER常见等待——解决会话等待产生的系统问题
    sql server迁移数据(文件组之间的互相迁移与 文件组内文件的互相迁移)
    always on 之路实践(未完)
    (4.16)存储过程的加密与解密
  • 原文地址:https://www.cnblogs.com/lixiang0829/p/2630811.html
Copyright © 2011-2022 走看看