C#中派生类调用基类构造函数用法分析

这里的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数

1、当基类中没有自己编写构造函数时,派生类默认的调用基类的默认构造函数
例如:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

public class MyBaseClass

{

}

public class MyDerivedClass : MyBaseClass

{

  public MyDerivedClass()

  {

   Console.WriteLine("我是子类无参构造函数");

  }

  public MyDerivedClass(int i)

  {

   Console.WriteLine("我是子类带一个参数的构造函数");

  }

  public MyDerivedClass(int i, int j)

  {

   Console.WriteLine("我是子类带二个参数的构造函数");

  }

}

此时实例化派生类时,调用基类默认构造函数

2、当基类中编写构造函数时,派生类没有指定调用构造哪个构造函数时,会寻找无参的构造函数,如果没有则报错,另外无论调用派生类中的哪个构造函数都是寻找无参的那个基类构造函数,而非参数匹配。
例如:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

public class MyBaseClass

{

  public MyBaseClass(int i)

  {

   Console.WriteLine("我是基类带一个参数的构造函数");

  }

 }

 public class MyDerivedClass : MyBaseClass

 {

  public MyDerivedClass()

  {

   Console.WriteLine("我是子类无参构造函数");

  }

  public MyDerivedClass(int i)

  {

   Console.WriteLine("我是子类带一个参数的构造函数");

  }

  public MyDerivedClass(int i, int j)

  {

   Console.WriteLine("我是子类带二个参数的构造函数");

  }

}

此时实例化派生类时则报错

3、基类中编写了构造函数,则派生类中可以指定调用基类的某个构造函数,使用base关键字。
例如

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

public class MyBaseClass

{

 public MyBaseClass(int i)

 {

  Console.WriteLine("我是基类带一个参数的构造函数");

 }

}

public class MyDerivedClass : MyBaseClass

{

 public MyDerivedClass() : base(i)

 {

  Console.WriteLine("我是子类无参构造函数");

 }

 public MyDerivedClass(int i) : base(i)

 {

  Console.WriteLine("我是子类带一个参数的构造函数");

 }

 public MyDerivedClass(int i, int j) : base(i)

 {

  Console.WriteLine("我是子类带二个参数的构造函数");

 }

}

此时实例化派生类时使用的带一个参数的构造函数时,则不会报错,因为他指定了基类的构造函数。

4、如果基类中的构造函数不含有无参构造函数,那么派生类中的构造函数必须全部指定调用的基类构造函数,否则出错
例如

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

public class MyBaseClass

 {

  public MyBaseClass(int i)

  {

   Console.WriteLine("我是基类带一个参数的构造函数");

  }

 }

 public class MyDerivedClass : MyBaseClass

 {

  public MyDerivedClass()

  {

   Console.WriteLine("我是子类无参构造函数");

  }

  public MyDerivedClass(int i) : base(i)

  {

   Console.WriteLine("我是子类带一个参数的构造函数");

  }

  public MyDerivedClass(int i, int j)

  {

   Console.WriteLine("我是子类带二个参数的构造函数");

  }

}

此时编译将不能通过

希望本文所述对大家的C#程序设计有所帮助。

时间: 2024-08-09 10:39:34

C#中派生类调用基类构造函数用法分析的相关文章

关于C#中派生类调用基类构造函数的理解

(1)当基类中没有自己编写的构造函数时,派生类默认条用基类的构造函数 (2)当基类中有自己编写的构造函数时,要在基类中添加无参的构造函数 Java代码   public class MyBaseClass { public MyBaseClass() { } public MyBaseClass(int i) { Console.WriteLine("我是基类带一个参数的构造函数"); } } public class MyDerivedClass : MyBaseClass { pu

转 关于C#中派生类调用基类构造函数的理解

关于C#中派生类调用基类构造函数的理解 .c#class       本文中的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1.  当基类中没有自己编写构造函数时,派生类默认的调用基类的默认构造函数 Ex: public class MyBaseClass    {    } public class MyDerivedClass : MyBaseClass    {        public MyDerivedClass()        {            Con

c++调用基类的构造函数(模板类)

代码如下 #include <stdlib.h> #include <stdio.h> #include <iostream> using namespace std; template<class T> class Base { public: Base(T name); virtual void toString(); protected: T id; }; template<class T> Base<T>::Base(T n)

C++ Primer 学习笔记_31_面向对象编程(2)--继承(二):继承与构造函数、派生类到基类的转换 、基类到派生类的转换

C++ Primer 学习笔记_31_面向对象编程(2)--继承(二):继承与构造函数.派生类到基类的转换 .基类到派生类的转换 一.不能自动继承的成员函数 构造函数 拷贝构造函数 析构函数 =运算符 二.继承与构造函数 基类的构造函数不被继承,派生类中需要声明自己的构造函数. 声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类成员的初始化调用基类构造函数完成(如果没有给出则默认调用默认构造函数). 派生类的构造函数需要给基类的构造函数传递参数 #include <iostream

C++调用基类的构造函数

基类的代码是 class base { public: base(int id); base(){}; virtual void toString(); protected: int id; }; base::base(int n) { printf("base constructor!\n"); id = n; } void base::toString() { cout<<"my id is "<<id<<endl; } 派生

C++_派生类的构造函数及派生类和基类之间的特殊关系

派生类和基类的概念及派生类构造函数的原理: 创建一个叫做TableTennisPlayer的基类,记录会员的名字和是否有球桌. 1 //声明一个基类 2 class TableTennisPlayer 3 { 4 private: 5 string firstname; 6 string lastname; 7 bool hasTable; 8 9 public: 10 TableTennisPlayer(); 11 void Name() const; 12 bool HasTable() c

C++虚函数的陷阱--派生类对象的基类函数调用基类虚函数出错

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">最近写程序的时候发现,派生类对象的基类函数如果调用基类虚函数,则它将调用的是派生类的对应函数,而不是我想调用的基类的对应函数.</span> 下面用一个例子来说明: //基类 class Base { public: void funA(); virtual void fun

c++中派生类对基类成员的三种访问规则(转)

C++中派生类对基类成员的访问形式主要有以下两种:1.内部访问:由派生类中新增成员对基类继承来的成员的访问.2.对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.今天给大家介绍在3中继承方式下,派生类对基类成员的访问规则. 1.私有继承的访问规则当类的继承方式为私有继承时,基类的public成员和protected成员被继承后成为派生类的private成员,派生类的其它成员可以直接访问它们,但是在类的外部通过派生类的对象无法访问.基类的private成员在私有派生类中是不可直接

5 在C#中如何调用基类构造器

//基类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MVATwentyQuestions { class Test { public string _name = ""; public Test(string name) { _name = name; } public virt