zoukankan      html  css  js  c++  java
  • c#继承与构造函数的调用

    1.实例化父类时,可以通过new子类来实例化父类,执行构造函数的顺序为:先执行父类的构造函数,再执行子类的构造函数。

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

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

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

    复制代码
    1 public class A
    2     {
    3         public A(string a) { }
    4     }
    5     public class B:A
    6     {
    7         public B() { }
    8     }
    复制代码

    这段代码会有一个错误提示:

    Severity Code Description Project File Line Suppression State
    Error CS7036 There is no argument given that corresponds to the required formal parameter 'a' of 'Program.A.A(string)' practise1 c:usersxuricdocumentsvisual studio 2015Projectspractise1practise1Program.cs 21 Active

    给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对象在执行构造函数前就会执行父类中对应的指定的构造函数了。

  • 相关阅读:
    [20180604]在内存修改数据(bbed).txt
    [20180630]truncate table的另类恢复2.txt
    [20180627]truncate table的另类恢复.txt
    [20180627]测试bbed是否支持管道命令.txt
    navicat连接异常 authentication plugin 'caching_sha2_password' 问题解决
    MYSQL类型与JAVA类型对应表
    Tomcat 8 Invalid character found in the request target. The valid characters are defined in RFC 3986
    springboot集成拦截器
    Caused by: java.lang.NoClassDefFoundError: org/apache/commons/pool2/impl/GenericObjectPoolConfig
    springboot集成过滤器
  • 原文地址:https://www.cnblogs.com/Jeely/p/10950984.html
Copyright © 2011-2022 走看看