c#继承与多态使用示例

 更新时间:2014年01月13日 10:47:13   作者:  
继承是面向对象程序设计的主要特征之一,允许重用现有类去创建新类的过程。下面使用示例学习一下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#中泛型类和扩展方法如何使用

    C#中泛型类和扩展方法如何使用

    这篇文章介绍了C#中泛型类和扩展方法的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • .net 随机生成汉字

    .net 随机生成汉字

    在c#中可以使用system.text来处理所有语言编码,其中encodiong类是比较重要的汉字编码类,接下来我们就围绕c#随机生成汉字代码讲起,有需要的朋友可以参考下
    2015-08-08
  • C#中32位浮点数Float(Real)一步步按位Bit进行分析

    C#中32位浮点数Float(Real)一步步按位Bit进行分析

    这篇文章主要介绍了C#中32位浮点数Float(Real)一步步按位Bit进行分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 初步认识C#中的Lambda表达式和匿名方法

    初步认识C#中的Lambda表达式和匿名方法

    这篇文章主要介绍了初步认识C#中的Lambda表达式和匿名方法,本文着重讲解Lambda表达式和匿名方法的基础知识,需要的朋友可以参考下
    2015-01-01
  • C#在运行时动态创建类型的实现方法

    C#在运行时动态创建类型的实现方法

    这篇文章主要介绍了C#在运行时动态创建类型的实现方法,主要通过动态生成C#代码再编译成程序集来实现动态创建类型的,需要的朋友可以参考下
    2014-09-09
  • 详解C#编程中一维数组与多维数组的使用

    详解C#编程中一维数组与多维数组的使用

    这篇文章主要介绍了详解C#编程中一维数组与多维数组的使用,包括数组初始化等基础知识的讲解,需要的朋友可以参考下
    2016-01-01
  • Unity shader实现遮罩效果

    Unity shader实现遮罩效果

    这篇文章主要为大家详细介绍了Unity shader实现遮罩效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • C#实现BBcode转为Markdown的方法

    C#实现BBcode转为Markdown的方法

    这篇文章主要给大家介绍了关于C#实现BBcode转Markdown的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-02-02
  • c# Thread类线程常用操作详解

    c# Thread类线程常用操作详解

    这篇文章主要介绍了c# Thread类线程常用操作详解的相关资料,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-03-03
  • Unity实现瞄准镜效果

    Unity实现瞄准镜效果

    这篇文章主要为大家详细介绍了Unity实现瞄准镜效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04

最新评论