• c# 面向对象的编程思想


    面向对象的三大特征

     

    大家都知道,c#是由Java修改演变出来的语言,那么c#与Java在很多方面其实是类似的,面向对象的三大特征:封装,继承,多态。

    相信大家对前两者,比较熟悉了,封装听起来很抽象但其实用的地方很多,基本在编程过程都会用到,继承相对来说就比较好理解了,可以简单理解为:儿子继承父亲的财产,拥有父亲所有的属性和方法,实际继承是多态的一个前提;所以在这里就不过多描述了,重点对多态进行一个梳理和总结,本人今天学习得到的体会,如有理解不恰当之处,尽请谅解!

    多态:在基类的函数前加上virtual关键字,用一件话来概括,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。其中,多态分为静态多态和动态分类。

     ①函数重载就是一个静态多态,比较简单就不再加以说明

    以下面一个代码为例:

    public int  sum(int a,int b){

    return a+b;

    }

    int main(){

    sum(10,20);

    return 0;

    }

    ②动态多态: 显然这和静态多态是一组反义词,它是在程序运行时根据基类的引用(指针)指向的对象来确定自己具体该调用哪一个类的虚函数。

         有多态之前必须要有继承,只有多个类同时继承了同一个类,才有多态这样的说法。

      在继承关系的前提下,实例化出不同的对象,这些对象调用相同的方法,但是却表现出不同的行为,这就叫做多态。

      在 C#语言中体现多态有三种方式:虚方法,抽象类, 接口。

    1、虚方法

    1.1什么是虚方法?

    在父类中使用 virtual 关键字修饰的方法, 就是虚方法。在子类中可以使用 override 关键字对该虚方法进行重写。

    Virtual方法也可以单独执行。

    1.2虚方法语法

    父类:

    public virtual 返回值类型 方法名()

    {

    方法体代码;

    }

    子类:

    public override 返回值类型 方法名()

    {

    方法体代码;

    }

    2、抽象类

    虚方法还是有方法体的,当我们父类中的这个方法已经虚到完全无法确定方法体的时候,就可以使用另外一种形式来表现,这种形式叫抽象方法。

    2.1 抽象方法语法

    抽象方法的返回值类型前用关键字abstract修饰,且无方法体。

    public abstract void Hello();

    抽象方法必须存在于抽象类中。

    abstract class FuLei

    3、接口

    3.1 接口语法

    3.1.1  抽象类到接口

    namespace xxx
    {
        interface IFly

         //实际的使用情况是,interface前面也有可能加public,里面的方法倒是不用加public。比如用接口的实例装载子类型对象

        {
            //接口中不能包含字段.
    
            //private string name;
    
            //接口中的方法不能有方法体,不能有访问修饰符(默认是public)
    
              void Fly();
        }
    }

    当抽象类中所有的方法都是抽象方法的时候,这个时候可以把这个抽象类用另外

    一种形式来表现,这种形式叫接口。

    虚方法,抽象类,接口是三种实现多态的手段。

    3.1.2  语法格式要求:

    接口使用 interface 关键字定义,没有 class 关键字,接口名一般使用 “IXxxx”

    (实际使用要在interface前加public ,因为我有时候为了依赖注入,直接使用接口来装载子类对象)

    使用自动属性 public int Age {get;set;})

    <1>接口中所有的方法都是抽象方法,所以接口不能被实例化;

    <2>一个类可以实现多个接口,被实现的多个接口之间用逗号分隔开;

    class Batmobile:Car,IFly

    <3>一个接口可以继承多个接口, 接口之间也要用逗号分隔。

    类与类之间只能单继承。

    3.1.3 总结

    在继承关系的前提下, 实例化出不同的对象, 这些对象调用相同的方法, 但是却

    表现出不同的行为, 这就叫做多态。

    三者语法比较:

     三者使用场景对比:

    虚方法:父类中的个别方法用虚方法实现,然后允许子类在有需要的情况下重写这些虚方法。

    virtual和override

    父类中包含虚方法也可以实例化对象。

    抽象类:父类定义一系列的规范,子类去把父类里面定义的这些规范全部实现。

    Abstract和override

    父类是抽象类,那么不能单独实例化。

    接口:是一种功能的扩展,是在原有的类的继承关系以外的新功能的扩展。

    Interface Ixxxx
    void B1();
        class Zi:Fu,IBBB
        {
            public void B1()
            {
                Console.WriteLine("B1");
            }
        }

    部分内容以及图片复制于:https://www.cnblogs.com/qixinbo/p/8244583.html

  • 相关阅读:
    CSS优化压缩
    CSS clear both清除浮动总结
    jQuery下拉列表二级联动插件
    网站靠什么赚钱?
    程序员到高级程序员的职业生涯
    ie数组不支持indexOf 方法解决
    jquery中的each方法,$.each this.each $.fn.each
    css3写出0.5px的边框
    js 自己创建ready多个可以依次加载
    javascript中的removeEventListener失效问题
  • 原文地址:https://www.cnblogs.com/oyw911/p/12050823.html
Copyright © 2020-2023  润新知