关于派生类的构造函数的一些问题

首先需要明确的是,无论是基类还是派生类,想要携带特定参量实例化对象,都需要存在一个相对应的构造函数。尤其是对于一个派生类来说,即是说基类里面已经有了携带了所需参量的构造函数,但他只是基类的构造函数,派生类并不可以直接拿过来用。

另外,对于派生类中base和this的使用,也算是痛的领悟,琢磨试验了好一会儿才搞明白了。不论是使用base还是this,他们的目的都在于保持或者扩展他们所引用的构造函数,所以说,原构造函数所携带的形参,不论是base还是this,它们也都需要携带齐全,最起码要等于,如果是做扩展可以多于,但是一定要包含原构造函数所携带的参量,否则会报错。如果不携带,也有解决方法,那就是具体写入参数,当然了,这样做也是特殊情况,说明你们运用环境已经不需要动态变化的参量了,你只需要固定好参数就行了,省的用到构造函数的时候还要每次都代入相同的参数,麻烦。具体代码实现如下所示,这是没有问题的代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace build_function
{
    class Program
    {
        static void Main(string[] args)
        {
            dog gou = new dog(10,"ade");
        }
    }
    class pet
    {
        public pet() { }
        public pet(string name) { }
        public pet(int age, string name) { }
#if false
        public pet(string name, int age) : this(age,name)
        {

        }
#endif
    }
    class dog : pet
    {
#if true
        public dog(string name):base(name)
        {

        }
#endif
#if false

        public dog(string name) 
        {

        }

#endif
#if true
        public dog(int age, string name):base(age,name)
        {

        }
#endif
        public dog(string name,int age) : this(name)
        {

        }
    }
}
但是,假如我去掉了base或者this前面的形参会发生什么?情况如下图所示:

没错,他会报错,就像我上面说的那样,一定要包含引用的前一个构造函数的参量才行。或者代入具体参数,如下图所示:

红色波浪就消失了。当然了,两幅图第二个dog的红色波浪不需要在意,因为重名了,现实编写代码中是不会存在这个现象的,我只是为了做好演示。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值