博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#继承与构造函数的调用
阅读量:4663 次
发布时间:2019-06-09

本文共 1029 字,大约阅读时间需要 3 分钟。

1、实例化父类时,可以使用new子类,执行构造函数顺序为:先执行父类构造函数,再执行子类构造函数。

2、实例化子类时,只可以new子类,执行顺序同上。

3、父类实例化后,只能执行父类的方法,获得父类的属性等。

4、实例化子类后,可同时执行子类和父类的方法和属性,如同名方法,则执行子类的方法。

我们看以下的代码:

    public class A

    {
        public A(string a) { }
    }
    public class B:A
    {
        public B() { }
    }

这段代码编译后,会有个错误提示:A does not contain a constructor that takes '0' arguments ,中文意思类A没有包含无参构造函数。按照提示,添加了无参构造函数,问题解决了。

那么为什么会这样呢,我们知道,子类在创建对象执行构造函数之前会先执行父类的构造函数,那么假如父类中有多个构造函数,又是执行哪个呢,这时候base这个关键字我想可以来说明一切。还是看代码吧:

    public class A

    {
        public A() { }
        public A(string a) { }
    }
    public class B:A
    {
        public B():base()
        { }
    }

在A中添加了无参构造函数,然后在B中修改了这句:pubic B():base(){},然后我们测试下,创建一个B对象,在A类中的2个构造函数中设置断点,发现无参构造函数执行了,我想正是因为这个base在这里发挥了作用,是base()指向了父类的无参构造函数。其实,在类B中,我们完全可以省略 base(),也能正常运行,

第一段代码中提示的错误的原因是A类中没有无参的构造函数,这样在执行B中的构造函数的时候,就没法执行A中的无参构造函数了。 下面我在写一段不使用无参构造函数的代码,看了会更加清晰:

    public class A

    {
        public A(string a)
        {
            //
        }
    }
    public class B:A
    {
        public B(string a):base(a)
        {
            //
        }
    }B中的构造函数指定了调用父类的A(string a)构造函数。这样我们创建B对象在执行构造函数前就会执行父类中对应的指定的构造函数了。

转载于:https://www.cnblogs.com/tanding/archive/2012/06/27/2564964.html

你可能感兴趣的文章
bzoj4580: [Usaco2016 Open]248
查看>>
HTML5 VS. Flash&Flex? – 浅谈Flash/Flex/HTML 5技术选型
查看>>
响应者链条
查看>>
基于定位的社交应用Foursquare开源网址(wp7)
查看>>
机电传动控制读书笔记二(书本内容)
查看>>
Address already in use: JVM_Bind<null>:8080错误的解决办法
查看>>
Vue子组件监听事件中传递参数的方法
查看>>
面向对象的几种方法详解(后)
查看>>
年龄问题
查看>>
winform自动更新并实现文件的批量异步下载
查看>>
UVA 301 Transportation
查看>>
MYSQL的常用命令和增删改查语句和数据类型!
查看>>
再回首数据结构—红黑树(一)
查看>>
界面设计规范(转)
查看>>
js与jquery混用问题
查看>>
可空类型 Nullable<T>
查看>>
python之封装
查看>>
iOS开发常用快捷键
查看>>
day3
查看>>
微信打开网页键盘弹起后页面会被顶上去,键盘收起,页面无法回到原来的位置,导致弹框里的按钮响应区域错位 position为fixed...
查看>>