• C#学习历程(三)[基础概念]


    》》简单描述OOP

    面向对象编程是由面向过程编程发展而来,不再注重于具体的步骤,而是更多的聚焦于对象。

    以对象为载体,然后去完善对象的特点(属性),然后实现对象的具体的功能,同时处理对象与对象之间的关系。

    oop有四大特点:抽象,封装,继承,多态

    @》封装

    被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。一般来说,是把经常用到的功能提取出来,独立成能够共用的代码。

    在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。

    C# 封装根据具体的需要,设置使用者的访问权限,并通过 访问修饰符 来实现。

    一个 访问修饰符eg.public private等 定义了一个类成员的范围和可见性。

    @》多态

    多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。

    @》继承

    继承就是派生类可以继承基类的成员变量和成员方法,而且必须在基类之后。

    注意格式

          class Tabletop(派生) : Rectangle(基类)

    C#中不支持多重继承,但是可以通过接口来实现。

         class Shape            //基类

         public interface PaintCost      //定义一个接口,常接口命令以 I 字母开头

        class Rectangle : Shape, PaintCost//派生类(接口的实现和类的继承格式类似)

    》》重载

    重载就是类里面相同方法名,不同形参的情况,可以是形参类型不同或者形参个数不同,或者形参顺序不同,但是不能使返回值类型不同。

    一定程度上和多态相关。

    》》虚函数

    重写和隐藏的定义:

    重写:继承时发生,在子类中重新定义父类中的方法,子类中的方法和父类的方法是一样的 例如:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.

    在不变动父类的情况下,将此方法改写为适合子类使用情况的方法。

    隐藏:基类方法不做申明(默认为非虚方法),在派生类中使用new声明此方法的隐藏。

    重写(virtaul)又要注意区分函数的重载,不过不同的是重载的函数之间的名称是一样的,只是参数的不同,对应的函数内部的具体实现也就不同

    重写(virtaul)时,定义的变量为父类或子类, 赋值为子类时.  皆调用子类的重写方法;(会从子类中查找有重写则调用, 没则调用基类方法)

    隐藏(new)时,定义的变量为父类则调用父类的方法(不管赋值是子类还是父类),定义的变量为子类则调用子类的方法。(使用场景: 当子类想取的一方法名称与父类相同时, 可以使用. 子类的方法与父类的方法相对来说是没有直接的关系(继承,重写==). )

    隐藏(new)示例:

    using    System;  
       class    A  
       {  
             public    void    F()    
             {  
                   Console.WriteLine("A.F");    
             }  
       }  
       class    B:    A  
       {  
             new    public    void    F()    
             {    
                   Console.WriteLine("B.F");    
             }  
       }  
       class    Test  
       {  
             static void Main(string[] args)
             {  
                   B    b    =    new    B();  
                   b.F();  
                   A    a    =    b;    
                   a.F();  
             }  
       }  
       输出为  
       B.F  
       A.F  

    重写virtual(虚方法)示例     

    using    System;     

    class    A     

    {           

      public    virtual    void    F() 

          {

                      Console.WriteLine("A.F");

           }

    }     

    class    B:    A     

    {

           public    override    void    F()

           {

                        Console.WriteLine("B.F");

           }     

    }     

    class    Test     

    {           

      static    void    Main()             

       {

                 B    b    =    new    B();                 

        b.F();                 

        A    a    =    b;                   

        a.F();           

      }     

    }     

    输出为      B.F      B.F

    》》类与结构

    Class可以被实例化,属于引用类型,是分配在内存的堆上的。

    Struct属于值类型,是分配在内存的栈上的.

  • 相关阅读:
    IndexDB
    实现es6中的set和map
    视口viewport
    nginx入门
    http协议
    图像格式
    promise
    js中this指向
    CSS 7阶层叠水平
    C# 一个方法如何返回多个值
  • 原文地址:https://www.cnblogs.com/echo-web/p/9451198.html
Copyright © 2020-2023  润新知