c#继承与多态使用示例
(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun)
继承和多态
派生类具有基类所有非私有数据和行为以及新类自己定义的所有其他数据或行为,即子类具有两个有效类型:子类的类型和它继承的基类的类型。
对象可以表示多个类型的能力称为多态性。
多态性示例
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(),则可以通过工通的机制调用该方法以清理资源。由于清理资源的方式特定于不同的类型,故在接口中定义通用的实现代码是没有意义的,接口即契约,类型派生于接口,即保证该类提供该接口规定的功能。
相关文章
C#.net实现在Winform中从internet下载文件的方法
这篇文章主要介绍了C#.net实现在Winform中从internet下载文件的方法,实例分析了基于Winform实现文件下载的相关技巧,需要的朋友可以参考下2015-07-07C#中把FastReport.Net报表控件的数据保存到数据库
这篇文章介绍了在数据库中保存FastReport.Net报表的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-06-06DevExpress之ChartControl实现时间轴实例
这篇文章主要介绍了DevExpress中ChartControl实现时间轴的方法,涉及相关C#绘图程序用法,具有一定的实用价值,需要的朋友可以参考下2014-10-10HashTable、HashSet和Dictionary的区别点总结
在本篇文章里小编给大家整理的是关于HashTable、HashSet和Dictionary的区别点,需要的朋友们可以学习下。2020-03-03
最新评论