c#继承与多态使用示例
继承和多态
派生类具有基类所有非私有数据和行为以及新类自己定义的所有其他数据或行为,即子类具有两个有效类型:子类的类型和它继承的基类的类型。
对象可以表示多个类型的能力称为多态性。
多态性示例
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#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序
- JavaScript使用prototype原型实现的封装继承多态示例
- 使用继承的多态(C#)
- 用一个简单示例来说明C#中的继承、封装和多态
- 用一个简单示例来说明C#中的继承、封装和多态
- C#多重继承 + 多态 + 扩展方法 简单示例
- Java,C#,C++在继承,覆盖和多态,抽象类等几个方面的比较归纳
- C#关于"该进程无法访问文件,因为该文件正由另一进程使用"的错误的一点心得(示例)
- C#枚举类型的使用示例
- C#使用Lucene建索引和搜索代码示例
- c#事务的使用、示例及注意事项
- Java中使用接口实现多继承和多态的方法
- 使用C#设置IIS站点运行的.Net版本示例
- C#枚举类型的使用示例
- C#学习——继承接口多态
- C#中全局钩子函数使用示例
- C#中全局钩子函数使用示例
- Java,C#,C++在继承,覆盖和多态,抽象类等几个方面的比较归纳
- [转贴]C#的XML数使用示例(很久以前转的,忘记出处了,做个备份
- Ilungasoft Framework: 使用视图处理继承关系、Tree结构实体关系映射示例[源码]