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

本文实例讲述了C#中派生类调用基类构造函数用法。分享给大家供大家参考。具体分析如下:

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

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

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

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关键字。
例如

 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、如果基类中的构造函数不含有无参构造函数,那么派生类中的构造函数必须全部指定调用的基类构造函数,否则出错
例如

 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#程序设计有所帮助。

(0)

相关推荐

  • C#调用mmpeg进行各种视频转换的类实例

    本文实例讲述了C#调用mmpeg进行各种视频转换的类.分享给大家供大家参考.具体如下: 这个C#类封装了视频转换所需的各种方法,基本上是围绕着如何通过mmpeg工具来进行视频转换 using System.Web; using System.Configuration; namespace DotNet.Utilities { //if (this.fload.HasFile) //{ // string upFileName = HttpContext.Current.Server.MapPa

  • C#中调用VB中Inputbox类的实现方法

    C#自己没有Inputbox这个类,但是Inputbox也蛮好用的,所以有两种方法可以使用 一:间接调用vb中的Inputbox功能 1.在项目中添加对Microsoft.VisualBasic引用       2.在项目中添加命名空间Using Microsoft.VisualBasic;       3.以后就可以直接使用VB中的好多类库(爽啊--) 例如:textBox1.Text=Microsoft.VisualBasic.Interaction.InputBox("提示性文字"

  • C#中子类调用父类的实现方法

    本文实例讲述了C#中实现子类调用父类的方法,分享给大家供大家参考之用.具体方法如下: 一.通过子类无参构造函数创建子类实例 创建父类Person和子类Student. public class Person { public Person() { Console.WriteLine("我是人"); } } public class Student : Person { public Student() { Console.WriteLine("我是学生"); } }

  • SQL Server中调用C#类中的方法实例(使用.NET程序集)

    需求是这样的,我在.net程序里操作数据时将一些字段数据加密了,这些数据是很多系统共用的,其中一delphi程序也需要用到,并且需要将数据解密,由于我在.net里加密的方式比较特殊,在delphi程序里解密比较繁琐且要消耗很多时间,所以不得不让sqlserver调用程序集的方式来解决问题. 下面只是一个例子,贴出来共享. 建立一个dll,class,代码如下: 复制代码 代码如下: namespace MyDll {     public partial class MyClass     {

  • C#使用Process类调用外部程序分解

    在程序开发中,一个程序经常需要去调用其他的程序,C#中Process类正好提供了这样的功能.它提供对本地和远程进程的访问并使您能够启动和停止本地系统进程. 一.启动进程实例 复制代码 代码如下: Process myProcess = new Process();   try  {       myProcess.StartInfo.UseShellExecute = false;       myProcess.StartInfo.FileName = "test.exe";    

  • HttpHelper类的调用方法详解

    本文实例为大家分享了HttpHelper类的方法使用,供大家参考,具体内容如下 首先列出HttpHelper类 /// <summary> /// Http操作类 /// </summary> public class HttpHelper { private static log4net.ILog mLog = log4net.LogManager.GetLogger("HttpHelper"); [DllImport("wininet.dll&qu

  • C#使用Process类调用外部exe程序

    在编写程序时经常会使用到调用可执行程序的情况,本文将简单介绍C#调用exe的方法.在C#中,通过Process类来进行进程操作. Process类在System.Diagnostics包中. 示例一 复制代码 代码如下: using System.Diagnostics; Process p = Process.Start("notepad.exe"); p.WaitForExit();//关键,等待外部程序退出后才能往下执行 通过上述代码可以调用记事本程序,注意如果不是调用系统程序,

  • C#调用C++版本dll时的类型转换需要注意的问题小结

    C#对于C++的dll引用时,经常会遇到类型转换和struct的转换 1. C++ 里的Char类型是1 个字节,c#里的Char是两个字节,不可以对应使用:可使用c#里的byte对应 2. structType temp = (structType)Marshal.PtrToStructure(IntPtr, typeof(structType));说明:此方式转换只针对包含c++基本类型的结构体,如果包含指针数组的结构体,使用泛型函数比较方便. 3. [StructLayoutAttribu

  • C#调用Java类的实现方法

    一.将已经编译后的java中Class文件进行打包:打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理:使用的命令:jar cvf test.jar -C com/ .其中test.jar为要生成的jar包:com/ . 为指定的当前目录下的文件夹,该文件夹包括子文件夹及class文件: 二.到IKVM官方网站下载IKVM需要的组件  http://www.ikvm.net/ ikvm-0.42.0.3.zip ikvmbin-0.42.0.3.zip openjdk6-b16

  • PHP调用C#开发的dll类库方法

    有的时候,我们需要在php中利用到其他语言编写的dll类库,如C#编写的dll,方法就是利用PHP new COM方法来调用,在调用之前先要把dll库注册并把程序集放入到全局缓存中. 1. 创建一个 C# Class Library ,命名为:HelloWorld 2. 打开项目的属性,在点选左边的 "Application"(就是第一个tab) , 然后点击Assembly Information 按钮 ,在弹出的Dialog中, 必须在底部勾上: Make assembly COM

随机推荐