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

  • 相关阅读:
    字符串转XML保存后保证XML的格式
    SmartFoxServer学习(3)--第一个Extension
    SmartFoxServer学习(2)--Extension调试
    SmartFoxServer学习(1)--初步了解
    jmeter 开发自己的java请求 二次开发
    hive 面试题
    美丽说-爬虫记录
    python中re.sub的使用 --解读一段代码
    python 抓取美丽说店铺的宝贝图片及详细信息的实现(爬虫)
    hadoop编码问题,mapreduce中Tex与string的转化 乱码问题
  • 原文地址:https://www.cnblogs.com/Jeely/p/10950984.html
Copyright © 2011-2022 走看看