c#继承与多态使用示例
发布时间:2021-11-24 16:48:33
继承和多态
派生类具有基类所有非私有数据和行为以及新类自己定义的所有其他数据或行为,即子类具有两个有效类型:子类的类型和它继承的基类的类型。
对象可以表示多个类型的能力称为多态性。
多态性示例
public class Parent
{
public Parent() { }
public void MethodA()
{
Console.WriteLine("调用MethodA()");
}
public class Child:Parent
{
public Child() { }
public void MethodB()
{
Console.WriteLine("调用MethodB()");
}
}
class Test
{
static void Main(string[] args)
{
Parent oParent = new Parent();
oParent.MethodA();//OK 调用类型Parent的成员方法
//Child oChild1 = (Child)oParent;//运行错误
Child oChild=new Child();
oChild.MethodB();//OK 调用派生类Child的成员方法
oChild.MethodA();//OK 调用基类Parent的成员方法
Parent oParent1 =(Parent)oChild;
oParent1.MethodA();
//oParent1.MethodB();//编译出错,类型Parent不存在方法MethodB()
Console.ReadLine();
Child oChild1 = (Child)oParent1;
oChild1.MethodB();//OK 调用派生类Child的成员方法
oChild1.MethodA();//OK 调用基类Parent的成员方法
Console.ReadKey();
}
}
}
在上例中,类Child既有效的Child,又是有效的Parent。oChild可以作为类型Child,因而具有Child本身定义的方法MethodB()和基类Parent定义的方法MethodA();同时,对象oChild也可以强制转换为Child的基类Parent的对象oParent。强制转换不会更改oChild对象的内容,但oParent对象作为类型Parent,因而只具有类Parent定义的方法MethodA()。
将Child强制转换为Parent后,可以将该Parent重新强制转换为Child。并只有实际上是Child实例的那些实例才可以强制转换为Child,否则会产生运行错误:无法将类型为Parent的对象强制转换为类型Child。
继承的类型
C#包含两种继承类型:实现继承和接口继承。
现继承表示一个类型派生于一个基类型,派生类具有基类的所有非私有(非Private)数据和行为。在实现继承中,派生类型的每一个方法采用基类型的实现代码,除非在派生类的定义中指定重写该方法的实现代码。实现继承一般用于增加现有类型的功能,或许多相关的类型共享一组重要的公共功能场合。
接口继承表示一个类型实现若干接口,接口仅包含方法的签名,故接口继承不继承任何实现代码。接口继承一般用于指定该类型具有某类可用的特性,例如,如果指定类型从接口System.IDisposable中派生,并在该类中实现IDisposable接口的清理资源的方法Dispose(),则可以通过工通的机制调用该方法以清理资源。由于清理资源的方式特定于不同的类型,故在接口中定义通用的实现代码是没有意义的,接口即契约,类型派生于接口,即保证该类提供该接口规定的功能。


猜你喜欢
- 写在前面:使用springboot作为web框架,方便开发许多,做分布式开发,dubbo又不可少,那么怎么整合在一起呢,跟我学一遍,至少会用
- springboot Jpa通用接口,公共方法de 简单使用 pom文件加入jpa这是我的例子使用的依赖。jpa必须当
- 前言代码生成器,也叫逆向工程,是根据数据库里的表结构,自动生成对应的实体类、映射文件和接口。看到很多小伙伴在为数据库生成实体类发愁,现分享给
- 服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 
- 本文将引导您完成 2 个示例,演示如何在 Flutter 中获取设备标识符使用 platform_device_id如果您只需要运行应用程序
- 本文实例为大家分享了使用C#写一个时钟,供大家参考,具体内容如下时钟是这样的一共使用四个控件即可:WinFrom窗体应用程序代码:using
- 首先,你可能会见到如下提示:File encoding is disabled because .properties file (see
- 模型对象的作用主要是保存数据,可以借助它们将数据带到前端。常用的模型对象有以下几个:ModelAndView(顾名思义,模型和视图,既可以携
- java连接zookeeper实现zookeeperJava服务端连接Zookeeper,进行节点信息的获取,管理…整理成一个基本工具添加依
- 代码如下:import java.io.BufferedReader;import java.io.DataOutputStream;imp
- 前言好久没有更新博客了,今天和大家分享一个关于emoji表情持久化问题,相信做web开发的都遇到过这样的问题,因为我们知道mysql的utf
- 本文实例为大家分享了Unity3D实现物体旋转缩放移动的具体代码,供大家参考,具体内容如下由于项目运行在安卓上,运用到了插件,比较麻烦。你们
- 本文实例为大家分享了android选项卡TabHost功能用法,供大家参考,具体内容如下首先定义三个xml文件,分别为l1.xml,l2.x
- Servlet1 Servlet 简介Servlet就是Sun 公司开发动态web的一门技术Sun在这些API中提供一个接口叫做:Servl
- 如题,市面上常见的方法是:var handle = bmp.GetHicon(); //得到图标句柄return Icon.Fr
- 在Java编程中,代码块就是指用“{}”括起来的代码。下面看一下这四种代码块。1、普通代码块就是指类中方法的方法体。public void
- 正文关于Java中的 * ,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动
- AOP :面向切面编程在程序设计中,我们需要满足高耦合低内聚,所以编程需满足六大原则,一个法则.AOP面向切面编程正是为了满足这些原则的一种
- 一、C#代码将html样式文件转为Word文档首先有个这样的需求,将以下网页内容下载为Word文件。html代码:<div class
- 效果图如下:1.适用需求后台生成验证码,用于登陆验证。2. 功能实现所需控件/文件:无(普通标签)3.功能点实现思路1)前台思路:(1)前台