三:继承

Posted yuanhaowen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三:继承相关的知识,希望对你有一定的参考价值。

 继承的类型

两种不同的继承类型:实现继承和接口继承

实现继承:就是类继承

接口继承:一个类型继承了函数的签名,而没有实现代码

多重继承:一个类派生自多个类。C#不支持多重继承,但是允许多接口继承。

结构:结构不支持实现继承,支持接口继承。

虚方法

如果一个类的方法声明修饰符是virtual,则在任何派生类中都可以重写该方法。重写该方法的修饰符是override

C#和Java的不同是,C#如果不是显示的说明是虚方法,则就不是虚方法,而Java中所有的方法都是虚方法。

隐藏方法

如果基类和派生类都有一个相同签名的方法,且没有声明时Virtual和override则基类的方法就会被隐藏。

这时候需要给派生类的方法添加修饰符new。则默认不会隐藏基类的方法,可以转换成基类继续调用基类的方法。

抽象类和抽象方法

如果一个类定义为Abstract则该类不能实例化。必须有派生类实现它。

抽象方法在基类中不能调用,必须在派生类中实现它。

密封类和密封方法

密封类定义为sealed,则表明该类不可再被继承。

(一般定义为sealed的类是出于商业原因或者不想被第三方使用,定义为密封类会限制使用方式,所以要慎用。)

派生类的构造函数

1:定义据有派生类的类

using System;

namespace DrivedClassCon
{
    class Program
    {
        static void Main(string[] args)
        {
            DirviedClass d = new DirviedClass();
            Console.ReadLine();
        }
    }

    class MyBaseClass
    {
        public MyBaseClass()
        {
            Console.WriteLine("base class");
        }
    }

    class DirviedClass:MyBaseClass
    {
        public DirviedClass()
        {
            Console.WriteLine("dirvied class");
        }
    }
}

运行结果是

技术分享图片

可以看到先执行的是基类的构造函数,再执行派生类的构造函数

2:如果基类有多个构造方法,也是这个结果。如下

using System;

namespace DrivedClassCon
{
    class Program
    {
        static void Main(string[] args)
        {
            DirviedClass d = new DirviedClass();
            Console.ReadLine();
        }
    }

    class MyBaseClass
    {
        public MyBaseClass()
        {
            Console.WriteLine("base class");
        }
        public MyBaseClass(string s)
        {
            Console.WriteLine("base class with parmeter {0}",s);
        }
    }

    class DirviedClass:MyBaseClass
    {
        public DirviedClass()        {
            Console.WriteLine("dirvied class");
        }
    }
}

如果必须要初始化基类的带参数的构造函数,则需要在派生类中的构造函数后面添加:base("参数")

3:如果需要调用类自己的其他构造函数,则需要在构造函数后添加this关键字

修饰符

public:修饰所有类型和成员。效果是任何代码都可以访问

protected:修饰类型和内嵌类型的所有成员。效果是只有派生类可以访问该项

internal:修饰所有类型和成员。效果是只能在包含它的程序集中访问该项

private:类型和内嵌类型的所有成员。效果是只能在它所属的类型中访问该项

protected internal:类型和内嵌类型的所有成员。效果是只能在包含它的程序集和派生类的任何代码中访问该项。

注意不能把类型定义成protected,private和protected internal。因为这些修饰符对于包含在命名空间中的类型没有意义。这三个修饰符只能用于成员。

其他修饰符

new:函数成员

static:所有成员

virtual:函数成员

abstract:函数成员

override:函数成员

sealed:类,方法,属性

extern:仅静态方法

接口

不能实例化接口,只能包含成员的签名。

接口不能有构造函数,也不能有字段(可以有属性)

不允许定义运算符重载。

一个接口或者类可以继承多个接口。

 

以上是关于三:继承的主要内容,如果未能解决你的问题,请参考以下文章

三:继承

26.Qt Quick QML-RotationAnimationPathAnimationSmoothedAnimationBehaviorPauseAnimationSequential(代码片段

分享前端开发常用代码片段

重修课程day22(面向对象三之继承和派生)

第十一单元 面向对象三:继承与多态

收藏|分享前端开发常用代码片段