zoukankan      html  css  js  c++  java
  • 19-C#笔记-多态性

    # 静态多态性

    ---

    ## 1 函数重载

    和C++一样。

    ---

    ## 2 运算符重载

    public

    static 

    operator

    public static Box operator+ (Box b, Box c)
    {
       Box box = new Box();
       box.length = b.length + c.length;
       box.breadth = b.breadth + c.breadth;
       box.height = b.height + c.height;
       return box;
    }
    

     

    不是所有的运算符都可以被重载。

    +, -, !, ~, ++, -- 这些一元运算符只有一个操作数,且可以被重载。
    +, -, *, /, % 这些二元运算符带有两个操作数,且可以被重载。
    ==, !=, <, >, <=, >= 这些比较运算符可以被重载。
    &&, || 这些条件逻辑运算符不能被直接重载
    +=, -=, *=, /=, %= 这些赋值运算符不能被重载。
    =, ., ?:, ->, new, is, sizeof, typeof 这些运算符不能被重载。

    运算符只能采用值参数,不能采用 ref 或 out 参数。

    C# 要求成对重载比较运算符。如果重载了==,则也必须重载!=,否则产生编译错误。同时,比较运算符必须返回bool类型的值,这是与其他算术运算符的根本区别。

    C# 不允许重载=运算符,但如果重载例如+运算符,编译器会自动使用+运算符的重载来执行+=运算符的操作。

    ---

    # 动态多态性

    ---

    ## 3 派生/继承

    abstract 抽象类,父类、基类;

    * 抽象类和普通类都可以被继承,但是抽象类不能实例化;

    sealed 封闭类,不能被继承;

    virtual 虚方法,虚函数;

    override 子类重载虚函数的时候,需要这个关键字。

       abstract class Shape // abstract 可以没有,abstract表示不能实例化
       {
          protected int width, height;
          public Shape( int a=0, int b=0)
          {
             width = a;
             height = b;
          }
          public virtual int area() // 虚函数
          {
             Console.WriteLine("父类的面积:");
             return 0;
          }
       }
       class Rectangle: Shape
       {
          public Rectangle( int a=0, int b=0): base(a, b)
          {
    
          }
          public override int area () // 重载虚函数 override
          {
             Console.WriteLine("Rectangle 类的面积:");
             return (width * height); 
          }
       }
    

      

    ---

     

    参考:

    http://www.runoob.com/csharp/csharp-operator-overloading.html

    http://www.runoob.com/csharp/csharp-polymorphism.html

    https://blog.csdn.net/t_twory/article/details/51543247

     

  • 相关阅读:
    腾讯精选50题算法【二叉搜索树的最近公共祖先】
    潜水一周,我精心整理了两个超级有用的职场生存之道
    全球用尽IPv4的一点思考
    Leetcode算法【114. 二叉树展开为链表】
    【翻译】全新16英寸MacBook Pro评测:开发人员的梦想成真
    Medium高赞系列,如何正确的在Stack Overflow提问
    Typora+PicGo+GitHub实现md自带图床效果
    SpringBoot输出日志到文件
    Mybatis用SQL做自连表查询
    IDEA实用插件推荐及使用方法详解
  • 原文地址:https://www.cnblogs.com/alexYuin/p/9069292.html
Copyright © 2011-2022 走看看