zoukankan      html  css  js  c++  java
  • .NET基础 (06)面向对象的实现

    面向对象的实现
    1 C#中类可以有多个父类、可以实现多个接口吗
    2 简述C#中重写、重载和隐藏的概念
    3 为什么在构造方法中调用虚方法会导致问题
    4 在C#中如何声明一个类不能被继承

    面向对象的实现

    1 C#中类可以有多个父类、可以实现多个接口吗

     C#中最多只能有一个父类,但可以实现多个接口。


    2 简述C#中重写、重载和隐藏的概念

     重写是指用Override关键字重新实现基类中的虚方法,在运行的过程中,无论通过那个类型的引用,真正类型的方法将被调用。

    隐藏是指用new关键字重新实现基类中的方法,在运行的过程中通过引用的类型判断应该调用哪个类型的方法。

    重载是指多个方法共享同一个名字并且拥有相同的返回值,但是却可以拥有不同的参数列表。


    3 为什么在构造方法中调用虚方法会导致问题

     构造方法中调用虚方法将导致运行时的错误。这是因为构造方法被调用时,子类的构造方法还未被调用,但是根据实际对象的类型,基类调用的虚方法是定义在子类中的方法,这就意味着调用了一个未完成构造的类型对象的方法,不可预计的错误将可能发生。

    构造方法示例如下:

        class Constructor
        {
            static void Main(string[] args)
            {
                //构造了一个底层类型
                C c = new C();
                Console.Read();
            }
        }
        public class Ref
        {
            public Ref(string s)
            {
                Console.WriteLine(s);
            }
        }
        public class Base
        {
            public Ref basestring = new Ref("Base初始化表达式");
            public Base()
            {
                Console.WriteLine("Base构造方法");
            }
        }
        public class A:Base
        {
            public Ref astring = new Ref("A初始化表达式");
            public A():base()
            {
                Console.WriteLine("A构造方法");
            }
        }
        public class B : A
        {
            public Ref bstring = new Ref("B初始化表达式");
            public B(): base()
            {
                Console.WriteLine("B构造方法");
            }
        }
        public class C : B
        {
            public Ref cstring = new Ref("C初始化表达式");
            public C(): base()
            {
                Console.WriteLine("C构造方法");
            }
        }

    输出结果:

    C初始化表达式
    B初始化表达式
    A初始化表达式
    Base初始化表达式
    Base构造方法
    A构造方法
    B构造方法
    C构造方法


    4 在C#中如何声明一个类不能被继承

    C#通过关键字sealed可以申明一个类型不可被继承,设计中应该为所有不被作为基类的类型添加sealed关键字,以避免各种来自继承的易产生的错误。

    String类就是sealed的

    转载请注明出处:

    作者:JesseLZJ
    出处:http://jesselzj.cnblogs.com

  • 相关阅读:
    编程语言的进化
    面向对象
    面向对象oop
    .NET——内存分配
    使用IIS承载WCF服务
    .NET代码生成器ASP.NET Factory 开放所有源代码下载
    SyntaxHighlighter
    写代码的三重境界
    Wijmo jQuery 插件集
    给vs2012换肤
  • 原文地址:https://www.cnblogs.com/jesselzj/p/4792069.html
Copyright © 2011-2022 走看看