第四章 继承

1,继承的类型

实现继承:

一个类派生于一个基类型,拥有该基类型所有成员字段和函数。

接口继承

一个类型只继承了函数的签名,没有继承任何实现代码。

 

2,实现继承

class MyDerivedClass:MyBaseClass,IInterface1,IInterface2

{

}

public struct MyderivedStruct:IInterface1, IInterface2

{

}

类只能继承一个基类,但可以继承多个接口

结构不能继承结构,但是结构能够继承接口

 

虚方法:

在基类中将方法声明为virtual,即可在派生类中重写,属性也支持virtual。

在派生类中重写基类方法时,需要显式地声明为override。

成员字段和静态函数都不能声明为virtual

 

隐藏方法:

如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有被声明为virtual或者override,派生类方法就会隐藏基类方法。

如果派生类需要隐藏方法,应该使用new关键字,否则编译器会提示警告

class yDerivedClass:HisBaseClass

{

    public new int MyMethod()

    {

    }

}

 

调用函数的基类版本

使用base.<MethodName>()调用函数的基类版本。

 

抽象类和抽象函数

将类和函数声明为abstract,抽象类不能实例化,抽象函数没有执行代码,必须在非抽象的派生类中重写。抽象函数总是虚拟的,但是不能显式地声明为virtual,会报错。如果类包含抽象函数,则类必须声明为抽象的。

 

密封类和密封方法

C#允许将类和方法声明为sealed。对于类,表示不能继承,对于方法,表示不能重写。

要在方法或者属性上使用sealed,必须现在基类上声明为虚拟的。否则会报错。

 

修饰符

可见性修饰符

修饰符

应用于

说明

public

所有类型或者成员

任何代码均可以访问该方法

protected

类型和内嵌类型的所有成员

只有派生的类型能够访问该方法

internal

类型和内嵌类型的所有成员

只能在包含它的程序集中访问该方法

private

所有的类型或成员

只能在它所属的类型中访问该方法

protected internal

类型和内嵌类型的所有成员

只能在包含它的程序集和派生类型的代码中访问该方法

类型不能定义为protected,private和protected internal,这些修饰符对于包含在命名空间中的类型来说是没有意义的。编译器也会报错。

但是对于嵌套类型,是有效的。

public class OuterClass

{

    protected class InnerClass

    {

        

    }

}

嵌套的内部类型总是可以访问外部类的所有成员,包括私有成员。

 

4,接口

声明接口

以:System.IDisposable接口为例:

public interface IDisposable

{

    void Dispose();

}

声明接口和声明抽象类在语法上是一致的,但不允许提供接口中任何成员的执行方式。一般情况下,接口中只能包含方法、属性、索引器和事件的声明。

不能实例化接口,它只能包含其成员的签名。接口不能有构造函数或者字段。也不能有运算符重载。

在接口定义还不允许声明成员上的修饰符。接口成员总是公有的,不能声明为虚拟的或者静态的。

实现接口的类必须提供所有接口方法和属性的实现代码。
接口仅表示成员的存在性,类负责确定这些成员是虚拟的还是抽象的。

 

接口可派生,派生方法和类的继承相同。

C#高级编程 (第六版) 学习 第四章:继承的更多相关文章

  1. C#高级编程 (第六版) 学习 第七章:委托和事件

    第七章 委托和事件 回调(callback)函数是Windows编程的一个重要方面,实际上是方法调用的指针,也称为函数指针. .Net以委托的形式实现了函数指针的概念,.Net的委托是类型安全的. 委 ...

  2. C#高级编程 (第六版) 学习 第五章:数组

    第五章 数组 1,简单数组 声明:int[] myArray; 初始化:myArray = new int[4]; 为数组分配内存. 还可以用如下的方法: int[] myArray = new in ...

  3. C#高级编程 (第六版) 学习 第三章:对象和类型

    第三章 对象和类型 1,类和结构 类存储在托管堆上 结构存储在堆栈上   2,类成员 类中的数据和函数称为类成员 数据成员 数据成员包括了字段.常量和事件   函数成员 方法:与某个类相关的函数,可以 ...

  4. C#高级编程 (第六版) 学习 第六章:运算符和类型强制转换

    第六章 运算符和类型强制转换 1,运算符 类别 运算符 算术运算符 + - * / % 逻辑运算符 & | ^ ~ && || ! 字符串连接运算符 + 增量和减量运算符 ++ ...

  5. C#高级编程 (第六版) 学习 第一章:.Net体系结构

    第一章 .Net体系结构 1,公共语言运行库(Common Language Runtime, CLR) .Net Framework的核心是其运行库的执行环境,称为公共语言运行库,或.Net运行库. ...

  6. C#高级编程(第六版)学习:第三十一章:Windows窗体

    第三十一章 Windows窗体 创建Windows窗体应用程序 在文本编辑器中输入: /* * form.cs * a simple windows form * */ using System; u ...

  7. C#高级编程 (第六版) 学习 第二章:C#基础

    第二章 基础 1,helloworld示例: helloworld.cs using System; using System.Collections.Generic; using System.Li ...

  8. c#高级编程第七版 学习笔记 第一章 .NET体系结构

    第一章      .NET体系结构 本章内容: 编译和运行面向.NET的代码 Microsoft中间语言(Microsoft Intermediate Language,MSIL或简称IL)的优点 值 ...

  9. c#高级编程第七版 学习笔记 第二章 核心c#

    第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用S ...

随机推荐

  1. Home Assistant系列 -- 设置界面语言与地理位置

    Home Assistant 安装的时候会自动根据你的系统语言设置默认语言,安装完成以后也可以根据需要自己设置选择语言.启动 Home Assistant ,浏览器打开web 界面,点击左上角的用户图 ...

  2. ubuntu18 安装apache2.4 php5.6 mysql5.6

    源码包下载: 链接:https://pan.baidu.com/s/1uoVMy_QNyR_zqVi06QPqKg 提取码:ll7s 注意:    ubuntu安装:sudo apt-get inst ...

  3. CAN总线的学习

    CAN(controller Area Network )总线的学习 1986 年德国电气商博世公司开发出面向汽车的CAN 通信协议(数据之间的交互),其目的是为适应“减少线束的数量”.“通过多个LA ...

  4. java入门---循环结构 - for, while 及 do...while&break&continue

        顺序结构的程序语句只能被执行一次.如果您想要同样的操作执行多次,,就需要使用循环结构.Java中有三种主要的循环结构: while 循环 do…while 循环 for 循环     在Jav ...

  5. 20155207 2006-2007-2 《Java程序设计》第3周学习总结

    20155207 2006-2007-2 <Java程序设计>第X周学习总结 教材学习内容总结 比较字符串实际字符内容是否相同,不要使用==,要使用equals() 关于类的语法问题 pu ...

  6. [bzoj1500][luogu2042][cogs339][codevs1758]维修数列(维护数列)

    先给自己立一个flag 我希望上午能写完 再立一个flag 我希望下午能写完. 再立一个flag 我希望晚上能写完... 我终于A了... 6700+ms...(6728) 我成功地立了3个flag. ...

  7. Html+CSS 学习第二天

    趁着这两天,将html和CSS基本上学了一遍,大家如果想学习的话,可以百度w3cSchool,进行学习. 基础我就不说了,直接将我做的一个登陆页面放上去.刚学完CSS,写个漂亮的登录界面恶心死我了,感 ...

  8. 【Jmeter测试】使用Java请求进行Dubbo接口的测试

    如何构建一个Dubbo接口测试的通用框架(https://github.com/nitibu/jmeter-dubbo-test)​从上面的流程我们可以看出,测试类大致的一个结构: 使用json文件来 ...

  9. 发送请求工具—Advanced REST Client的安装使用

    1. 0 下载得到Advanced-REST-client_v3.1.9.zip 链接:http://pan.baidu.com/s/1c0vUnJi 密码:z34d 1.1 解压Advanced-R ...

  10. 存储过程关于LOOP循环问题

    本随笔文章,由个人博客(鸟不拉屎)转移至博客园 发布时间: 2018 年 10 月 17 日 原地址:https://niaobulashi.com/archives/procedures_loop. ...