C#高级(五)继承,派生类,派生类的构造方法


一、基本概念

首先我们来了解两个基本概念:实现继承和接口继承

1)、实现继承,表示一个类派生于一个基类型,并拥有该基类型的所有成员字段和函数。

2)、接口继承,表示一个类型只继承了函数的签名,没有任何实现的代码。在需要指定该类型具有某些可用的特性时,最好使用这种继承。

注意,在C#中,不支持多重继承,但一个类却可以实现多个接口。同样,结构总是派生于System.ValueType , 他们还可以派生于任意多个接口。

二、实现继承。

(1)、我们先来看个例子。

Code

在上面的例子中,public class test : baseClass 就是声明了类test继承自baseClass。这样,在类test中也就具有了父类的方法,getUrl() 。在上例中输出结果是 www.gosoa.com.cn

2)、虚方法

把一个基类中的方法声明为 virtual ,则该函数可以在任何派生类中重写了。

C#中,函数默认下不是虚拟的,需要显式的声明。但在java中,所有函数都是虚拟的。C#中,派生类的函数重写另一个函数时,要使用override 关键字显式的声明。如果声明了 override 函数,但在基类中如果没有可以重写的函数,编译器就会报错了。

注意,成员字段和静态函数都不能声明为 virtual ,因为这个概念只对类中的实例函数成员有意义。

我们来看个例子。

Code

本例的输出结果是 www.gosoa.com.cn

(3)、隐藏方法。

在上例中,baseClass2类的getUrl()方法,如果没有override 关键字,则baseClass2类的getUrl()方法就会隐藏基类的getUrl()方法。在编译的时候,系统会给予警告。

4)、调用函数的基本版本

还是看上一个例子,我们稍作修改,如下,

Code

我们来看url+=base.getUrl();这一句,base就是调用基类的意思,所以,本例的输出结果是

http://gosoa.com.cn

(5)、抽象类和抽象方法。

C#允许把类声明为 abstract ,抽象类不能实例化,抽象方法不没有执行代码。

我觉得抽象类和抽象方法没有什么用,一般我们用接口就可以了。搞不太明白C#中这个抽象类和抽象方法到底想用来干什么。

6)、密封类和密封方法。

如果把类声明为 sealed 即标明该类不可以被继承,如果是方法,则方法不可以被重写。

7)、派生类的构造方法。

在派生类中,构造方法是依次从基类中执行,最后到派生类本身的构造函数。

我们来看下面的例子:

Code

我们先声明了一个 userBase 类,其有个私有成员变量,还有两个构造函数。oneMen类派生自userBase 类。并且oneMen类有其自己的三个构造函数。public oneMen(string username):base(username)这个构造函数继承了基类中的构造函数,间接的给基类中的私有字段赋值了。public oneMen(string username,string hisWebSite):base(username) 这个构造函数也继承了基类的构造函数,在Main()函数中我们依次通过三种方式实例化oneMen类的时候,依次输出的结果是

oneMen()

I'm good men

Yes , I'm very good !

oneMen("pan")

pan is a good men!

oneMen("pan","www.gosoa.com.cn")

pan’s 's webSite is www.gosoa.com.cn

希望通过这个例子让大家了解到派生类的构造函数。

优质内容筛选与推荐>>
1、divideAndRemainder()方法
2、技巧只能源码找?李沐带你纵览卷积网络实战中的惊艳技艺
3、基础篇-UIApplication、UIWindow以及程序的启动流程看我就够了
4、设计模式中的设计原则
5、SpringMVC详解(六)------与json交互


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn