• C#继承之构造函数


       最近发现自己的基础知识很薄弱,跟朋友交流的时候经常发现很多基础知识自己是一知半解,似懂非懂。每每这个时候我觉得很有必要去彻底弄懂它,至少应该有个清晰的认识。最近跟一个朋友讨论到C#继承中构造函数的问题,看代码说问题吧。
        public class A
        {
            
    public A(string a) { }
        }
        
    public class B:A
        {
            
    public B() { }
        }
    这段代码编译后,会有个错误提示:A does not contain a constructor that takes '0' arguments ,中文意思类A没有包含无参构造函数。按照提示,我在类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中的无参构造函数了。 下面我在写一段不使用无参构造函数的代码,看了会更加清晰:
    Code
    B中的构造函数指定了调用父类的A(string a)构造函数。这样我们创建B对象在执行构造函数前就会执行父类中对应的指定的构造函数了。
    第一次写博客,憋了很久才写出来,这些都是自己跟朋友讨论出来的,加上代码测试跟自己的理解,希望能帮到一些C#的初学者,我想,很多初学者在这里也肯定很迷惑(也包括我)。如果园子里的大牛看到了,也希望你们能指点一二,不知道自己描述的是否确切。
  • 相关阅读:
    List分组和排序
    IOS 可靠性测试 iosMonkey
    Mac 10.10 下安装jdk 1.7 以上
    Ubuntu 无法拖拽复制
    Ubuntu 环境安装整理
    vmware 中 ubuntu linux 安装vmware tools
    Vmware linux 安装 Vmware Tools 提示只读
    Ubuntu_文件夹名字转化成英文
    Ubuntu_开启root 登陆
    Tomcat 用户配置
  • 原文地址:https://www.cnblogs.com/SuperJoe/p/1579121.html
Copyright © 2020-2023  润新知