C# 继承、多态、重载、重写

2019-09-30  本文已影响0人  李霖弢

继承

继承是面向对象的编程的一种基本特性。 借助继承,能够定义可重用(继承)、扩展或修改父类行为的子类。
C# 和 .NET 不支持多重继承,也就是只能继承自一个类,但是继承可以传递。C#类始终继承自一个基类(如果未在声明中指定一个基类,则继承自System.Object)。
可以使用接口来模拟多重继承。
静态构造函数、实例构造函数、终结器 无法被继承。

基类和派生类

一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数。

class <派生类> : <基类>
{
 ...
}

父类的构造函数会优先于子类执行。
当采用 参数化构造函数 时,子类构造函数需继承父类。
若子类中存在父类同名的方法/属性,则子类实例调用时优先用子类的(但不会导致父类的被覆盖),可以通过base访问父类的内容

    class Tabletop : Rectangle
    {
        public Tabletop(double l, double w) : base(l, w)
        { }
        public void Display()
        {
          Console.WriteLine(base.Display());
        }
    }

多态 (静态重载 和 动态重写)

多态是同一个行为具有多个不同表现形式或形态的能力。

静态多态性中,在编译时发生
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;
}
动态多态性中,在运行时发生

override关键字用于修改方法,具有override关键字修饰符的方法是对基类中同签名方法的新实现,基类中的同名方法必须声明为virtualabstract类型。给基类中的方法添加virtual关键字表示可以在派生类中重写它的实现。
new、static和virtual关键字不能与override修饰符一同使用

using System;
namespace InheritanceApplication
{
    abstract class Father
    {
        public int num = 10;
        abstract public void Fun();
    }
    class Son : Father
    {
        public override void Fun()
        {
            Console.WriteLine(num);//10
        }
    }
    class FatherTester
    {
        static void Main(string[] args)
        {
            Son son = new Son();
            son.Fun();
            Console.ReadKey();
        }
    }
}
using System;
namespace InheritanceApplication
{
    class Father
    {
        public int num = 10;
        public virtual void Fun()
        {
            Console.WriteLine("执行基类");
        }
    }
    class Son : Father
    {
        public override void Fun()
        {
            Console.WriteLine(num);//10
        }
    }
    class FatherTester
    {
        static void Main(string[] args)
        {
            Father father = new Father();
            father.Fun();
            Son son = new Son();
            son.Fun();
            Console.ReadKey();
        }
    }
}
    class Son : Father
    {
        public new void Fun()
        {
            Console.WriteLine(num);
        }
    }
上一篇下一篇

猜你喜欢

热点阅读