zoukankan      html  css  js  c++  java
  • C#中的基本概念回顾

    (变量私有的叫字段,公有的是属性)
     
    对象是一个自包含的实体,用一组可识别的特性和行为来识别
    类:具有相同的属性和功能的对象的抽象的集合
    (类名字首字母要大写,如果是多个单词则各个单词首字母都要大写)
    构造方法/构造函数,就是对类进行初始化。构造方法与类同名,无返回值,
                       也不需要void,在new时候调用
       (所有类都有构造方法,如果不编码则系统默认生成空的构造方法,
        若你有定义的构造方法,那么默认的构造方法就会失效了)
    方法重载提供了创建同民的多个方法的能力,但是这些方法需使用不同的参数类型。
        (方法名相同,但参数类型或个数有所不同)
    protected 表示继承时,子类可以对基类有完全访问权。子类继承父类,则子类就拥有了父类的

    除private外的属性和功能。(对子类公开,但不对其他类公开)
    protected 只给继承的子类使用。
    调用父类的成员,可以用base关键字
    A7.继承的优点是,继承使得所有子类公共的部分都放在了父类,使得代码得到了共享,这样避
    免了重复,另外,继承可使得修改或扩展继承而来的实现都较为容易
    不继承的话,如果要修改功能,就必须在所有重复的方法中修改,代码越多,出错的可能就越大

    继承是有缺点的,父类变,则子类不得不变。继承会增大两个类之间的耦合性。
    (is-a 一个类是另一个类的特殊种类时,可以考虑用继承;has-a 某个角色具有某一项责任时,
    不适合用继承,如飞机场有飞机则飞机不能继承飞机场)
    A8.多态表示不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。
    1.子类以父类的身份出现。2.子类工作时以自己的方式来实现。3.子类以父类的身份出现时,子
    类特有的属性和方法不可以使用。
      为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚拟的。只是通过在
    该成员的返回类型之前添加virtual关键字来实现。子类可以选择使用override关键字,讲父类
    实现替换为它自己的实现,这就是方法重写override,或方法覆写。
      不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。
      多态的原理是当方法被调用时,无论对象是否被转换为其父类,都只有位于对象继承链最末端
    的方法实现会被调用。虚方法是按照其运行时类型而非编译时类型进行动态绑定调用的。
    多态: 父类中virtual定义方法体 ,子类中通过override来具体实现
                                     (不同的子类,实现的方式可以不同)
    A9.重构 类名和构造函数名都继承父类(其中构造函数继承的方式是 方法名:base(),然后子类
    中重写实现的方法) 这样调用的方法相同,但是实现的效果可以达到不同
    A10.抽象类 把实例化没有任何意义的父类(如Animal)改成抽象类。允许把类和方法声明为
    abstract,即抽象类和抽象方法。
    抽象方法没有方法体,直接在括号后加分号;
    1)抽象类不能实例化 2)抽象方法是必须被子类重写的方法 3)如果类中包含抽象方法,那么类就
    必须定义为抽象类,不论是否还包含其中一般方法
    A11.接口 接口把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦实现了接口
    ,类就可以支持接口所指定的所有属性和成员。声明接口在语法上和声明抽象类完全相同,但不
    允许提供接口中任何成员的执行方法。(接口不能实例化,不能有构造方法和字段,不能有修饰
    符如public、private等;不能声明虚拟的或者静态的等)。实现接口的类就必须要实现接口中的
    所有方法和属性。
    抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现,一个类只能继承一个抽
    象类,但可以实现多个接口等等。
    第一,类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象;
    第二,如果行为跨越不同类的对象,可使用接口;对于一些类似的类对象,用继承抽象类;
    第三,从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,
    而接口是根本不知道子类的存在,方法如何实现还不确定,预先定义。
    (抽象类是自底而上抽象出来的,而接口是自顶向下设计出来的)
    A12.集合 数组的容量是固定的,而ArrayList的容量是可根据需要自动扩充的。
    (ArrayList是System.Collections下的一部分,使用大小可按需动态增加的数组实现IList接口)
    A13.泛型 声明一泛型变量,如:IList<Animal> arrayAnimal; (IList或List均可)
           arrayAnimal=new List<Animal>();
           arrayAnimal.Add(new Cat("小花"));...
     
     
    A7.继承
    class Animal
    {
        protected string name="";
        public Animal(string name)
        {this.name=name;}
        public Animal()
        {this.name="无名";}
     
        protected int shoutNum=3;
        public int ShoutNum
        {
           get {return shoutNum;}
           set {shoutNum=value; }
        }
    }
    class Cat : Animal
    {
        public Cat () :base ()
        {}
        public Cat(string name)
        {}
        public string Shout()
        {
           string result="";
           for(int i=0;i<shoutNum;i++)
            {result += "喵, ";}
      
            return "我的名字叫"+ name + ""+ result;
         }
    }
    class Dog : Animal
    {
         public Dog () :base ()
         {}
         public Dog(string name)
         {}
        public string Shout()
        {
          string result="";
          for(int i=0;i<shoutNum;i++)
          {result += "汪, ";}
      
         return "我的名字叫"+ name + ""+ result;
        }
    }

    A8.多态
    class Animal
    {
        public virtual string Shout() //虚方法,可以被子类重写
        {  return "";  }
    }
    class Cat : Animal
    {
          public Cat():base()
          {}
          public Cat(string name):base(name)
          {}
          public override string Shout()
          {
             string result="";
             for(int i=0;i<shoutNum;i++)
             {
               result+="喵, ";
             }
             return "我的名字叫"+ name + " "+result;
          }
    }
    class Dog : Animal
    {
        public Dog():base()
        {}
        public Dog(string name):base(name)
        {}
        public override string Shout()
        {
            string result="";
            for(int i=0;i<shoutNum;i++)
            {
              result+="汪, ";
            }
           return "我的名字叫"+ name + " "+result;
        }
    }
    private Animal[] arrayAnimal;
    private void button1_Click(object sender,EventArgs e)
    {
         arrayAnimal=new Animal[5];
         arrayAnimal[0]=new Cat("小花");
         arrayAnimal[1]=new Dog("阿毛");
         arrayAnimal[2]=new Dog("小黑");
         arrayAnimal[3]=new Cat("娇娇");
         arrayAnimal[4]=new Cat("咪咪");
    }
    private void button2_Click(object sender,EventArgs e)
    {
         //由于多态性,所以叫的时候,会不同;程序会自动去找item是什么对象,如Cat,Dog
         foreach(Animal item in arrayAnimal)
         { MessageBox.Show(item.Shout()); }
    }

    A10.抽象类
    abstract class Animal
    {
         protected abstract string getShoutSound();//没有方法体,直接加分号
    }
    //只要类中有抽象方法,则该类一定是抽象类;
    //继承抽象类一定要实现抽象类的方法(即重写)

    A11.接口
    interface IChange
    {
         string ChangeThing(string thing);  //表示返回sting型
    }

    class MachineCat:Cat,IChange //继承 Cat,并实现IChange接口
    {
        public MachineCat():base()
        {}
        public MachineCat(string name):base(name)
        {}
        public string ChangeThing(string thing)//实现接口的方法
        {return base.Shout()+"我有万能口袋,我可变出:"+thing;}
    }

    private void button1_Click(object sender,EventArgs e)
    {
         MachineCat mcat=new MachineCat("叮当");
         StoneMonkey wukong=new StoneMonkey("孙悟空");
         IChange [] array=new IChange[2];
         array[0]=mcat;
         array[1]=wukong;
         //利用多态性实现不同的ChangeThing
         MessageBox.Show(array[0].ChangeThing("各种各样的东西!"));
         MessageBox.Show(array[1].ChangeThing("各种各样的东西!"));
    }
     

    设计模式380 委托和事件

    护眼色度值:
    色调85
    饱和度90
    亮度205
  • 相关阅读:
    ambry集群搭建(无SSL验证的方式)
    接口属性命名不规范的处理方式
    windows下搭建ElasticSearch
    MyBatis-Plus分页插件——PageHelper和IPage原理介绍
    饥荒服务器搭建加mod使用 阿里云服务器 Ubuntu18
    WSL2+Ubuntu20.04桌面功能配置
    设计模式学习总结(Java版)
    Java in 蓝桥杯
    Windows 批处理脚本学习
    Vue风格指南小结
  • 原文地址:https://www.cnblogs.com/jx270/p/2430798.html
Copyright © 2011-2022 走看看