zoukankan      html  css  js  c++  java
  • Net学习日记_基础提高_6

    抽象类方法

    1.抽象方法用abstract修饰。

    2.抽象方法不能有方法体,大括弧也不能有。

    3.抽象方法必要再抽象类中。abstract class

    4.抽象方法不能实例化,因为有抽象成员,而抽象成员是没有方法体的。

    5.子类要实现,子类必须重写父类的抽象方法。(与virtual最大的不同)

    6.在子类中无法通过base关键字,调用父类的抽象方法。

    7.抽象方法是光说不做,只是定义了具有这样的行为,但是具体的实现交给子类。

    8.抽象类中可以拥有非抽象成员,为了继承给他的子类。

    9.抽象类中可以拥有虚方法。

    10.子类必须重写父类的方法,父类没有必要实例化,就用抽象类

    11.抽象类被继承,是为了多态。

    12.抽象成员不能是私有的,因为子类没办法访问,就没办法重写。

    案例:手机储存设备。

    ToString()与Equal()

    书写一个类,其实书写这个类的ToString()方法。书写是类名(p.GetType().ToString());

    1. object类里面的equals方法是比较两个对象的引用地址,如果引用地址都一样,则返回True;

    2. 引用类型(类)的Equals方法默认比较是两个对象的地址,如果要改变规则,则子类重写;

    3. string 值类型 Equals方法比较的两个结构对象里字段的值(这时候不存在重写,只是值类型自己新增1方法);

    接口

    IRunable(接口命名)   I**able

    interface定义1个接口;接口表示具有某种能力。(接口其实就是规范,而不是物理存在的东西)

    1.接口是1个特殊的的抽象类。(里面所有方法默认都是抽象的,因此不能有访问修饰符,默认就是public)

    2.接口不能实例化。(不能new)

    3.接口内只能定义属性、方法、索引器、事件。

    4.实现接口的类,必须要实现接口中的所有的成员。

    5.实现类在实现接口的成员的时候,不要写override关键字

    6.实现成员的时候,必须要保证签名的一致。

    7.接口就是一个纯粹的为了规范实现类的。

    8.string Name{get; set;} 这里不是自动属性,是个普通属性,只不过get、set方法没有实现

    何时使用接口?

    多个类具有相同的行为,但是没有共同的父类,就是使用接口。

    接口与抽象类的区别?

    抽象类:可以找到父类,并且可以通过父类继承给子类一些成员。

    接口:找不到父类,并且解决单根性的问题。可以拥有多个接口。

    1个类只能继承一个父类,但是可以实现多个接口。父类要写在第一个位置,一定程度上解决了类的单根性的问题。

    接口也可以继承接口,并且可以多继承。

    接口中的成员可以实现为抽象方法或者虚方法,让实现类的子类去实现。

    abstract Person : ISingleable

    {

     public abstract void Single();

    }

    interface ISingleable

    {

    void Single();

    }

    显示实现接口

    class Animal:ISingleable

    {

      public void Sing()

      {

      }

      void ISingleable.Sing()

      {

      }

    }

    显示实现接口是为了解决方法名冲突的问题,显示实现的接口的方法是私有的,所以不能通过对象的变量来调用。

    但是我们可以通过接口对象来调用。

    使用接口的建立:

    面向对象编程,使用抽象(父类,抽象类,接口)不使用具体。

    “向上转型”

    在编程时,

    1.接口->抽象类->父类->具体类

    2.能使用接口就不使用抽象类,能使用抽象类就不是父类,能使用父类就不用子类。

    3.避免定义“体积庞大的接口”、“多功能接口”、会造成“接口污染”。单一指着原则。

    4.定义多个职责单一的接口(组合使用)。

    以上要求,还是为了多态

    装箱拆箱的问题

    啥叫装箱(box)?将值类型转换成引用类型。(将栈里的值放入堆中)

    int i = 12;

    object obj = j;

    啥叫拆箱()?将引用类型转换为值类型。(将堆的值强行放入栈中)

    i = (int) obj;

    装箱与拆箱是比较消耗性能的,要尽量去避免,在我们的程序中发生这样的行为。

  • 相关阅读:
    多线程与MySQL(十)
    多进程与多线程(九)
    异常处理与网络编程(八)
    面向对象,绑定方法与异常处理(七)
    模块与对象(六)
    包与模块(五)
    迭代器与函数Python学习(四)
    函数与装饰器Python学习(三)
    数据库
    并发编程
  • 原文地址:https://www.cnblogs.com/lisong-home/p/7668434.html
Copyright © 2011-2022 走看看