C#的继承以及继承中的构造方法

C#继承


继承是个啥
简单的理解就是,让a类去继承b类,那么a类就会有b类中的属性,变量,方法,但不会继承b类的构造方法(相关构造方法的问题,下面再解释),当a类继承b类后,a类称作b类的子类,而b类称作a类的父类,还有其他的叫法,比如a对应派生类,b对应基类。

举个例子,假若写了一个动物类,其中包含年龄的属性,然后再写一个狗类去继承这个动物类,狗类中写入品种属性,当你调用狗类时,可以访问到品种以及年龄。


继承的代码格式
一个类要继承另一个类,那么在其声明时采用如下格式 class A :B{} 表示A类继承自B类,拿上面那个例子做个代码演示如下:

class Animal
{
	int age;
}
class Dog : Animal
{
	String Varieties;
}

继承的特点
第一:在上面也说了,子类继承父类以后,拥有父类的属性,变量,方法
第二:子类不会继承父类的构造方法
第三:一个类仅可继承自一个父类(大部分面向对象语言都是这样,但也有例外)
第四:一个类可被多个子类所继承
第五:用关键词sealed修饰的类不可被继承


C#继承的构造方法

子类实例化规则
在子类实例化时,先去实例化其父类部分,再去实例化子类的附加部分


子类实例化与构造方法的关系
由于实例化这个过程是要调用构造方法的,所以根据子类实例化规则,子类实例化时应先调用父类的构造方法将父类部分实例化出来,而默认是去调用父类的无参构造方法,因此当父类中写入且仅写入一个有参构造方法时,继承其的子类直接使用构造方法实例化会报错,因为调用不到无参构造方法。


继承中构造方法冲突的解决方案

  1. 在父类中再写入一份无参的构造方法,哪怕其方法体为空也可以。
  2. 让子类的构造方法之前执行父类的构造方法,使用以下格式让其实现

使一个方法在执行前调用另一个方法
修饰词 方法A() : 方法B() {方法体;}
以上格式意为在方法A执行前调用方法B;
有关方法B的一些关键词与操作:this代表当前类体,base代表父类类体;

下面再用上面的例子做一个代码演示,去演示子类中构造方法之前调用父类的有参构造方法

 class Program
    {
        static void Main(string[] args)
        {
            Dog hsq = new Dog(6, "HSQ");
        }
    }
  class Animal
    {
        public int age;
        public Animal(int age1)
        {
            age = age1;
        }
    }

  class Dog : Animal
    {
        public string Varieties;
        public Dog(int a, string s) : base(a)
        {
            Varieties = s;
        }
    }
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#的构造函数是用于创建和初始化类的实例的特殊方法。构造函数的名称与类名相同,并且没有返回类型。在创建类的对象时,构造函数会自动调用。 继承是面向对象编程的一个重要概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。在C#,使用冒号(:)来指定一个类继承自另一个类。 当子类继承父类时,子类会自动继承父类的构造函数。子类可以通过调用父类的构造函数来初始化从父类继承的成员变量和属性。在子类的构造函数使用关键字base来调用父类的构造函数。 下面是一个示例代码,演示了C#构造函数和继承的用法: ```csharp // 父类 class Animal { public string Name { get; set; } // 父类的构造函数 public Animal(string name) { Name = name; } } // 子类 class Dog : Animal { public string Breed { get; set; } // 子类的构造函数 public Dog(string name, string breed) : base(name) { Breed = breed; } } // 使用 Dog myDog = new Dog("旺财", "哈士奇"); Console.WriteLine($"Name: {myDog.Name}, Breed: {myDog.Breed}"); ``` 在上面的示例,Animal类有一个构造函数,接受一个name参数来初始化Name属性。Dog类继承自Animal类,并且有一个额外的属性Breed。Dog类的构造函数使用base关键字调用父类的构造函数来初始化从父类继承的Name属性,然后再初始化自己的Breed属性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值