C#构造函数是一个特殊的类方法。在很多方面,包括访问修饰符、重载以及参数列表的语法等方面,构造函数与普通的方法是类似的。然而,在使用方面以及行为方面,构造函数也具有许多特殊的语法和语义规则。

下面列出C#构造函数在使用方面及行为方面的一些特殊规则:

1、如果开发人员没有为一个类提供构造函数,那么,C#将提供一个默认的构造函数。

2、必须使用操作符 new 来调用一个构造函数。

3、构造函数的名称必须与类的名称相同。

4、一个构造函数的返回类型是这个类的一个实例,而一个普通方法的返回类型可以是任何类型。

5、构造函数不能覆盖一个超类的构造函数,因此,new、virtual、override、abstact以及sealed关键字不能在构造函数声明语句中使用。

6、利用 :this() 和 :base(),构造函数可以调用其他构造函数。

在声明一个构造函数的时候,如果没有使用 :this() 或 :base()来显式地调用其他构造函数,那么C#就插入一个无参数的 :base()。这可能产生令人惊奇的结果,看一下代码: 

using System;  
 
 public class Father  
 {  
     //private string name;  
     //public Father(string name)  
     //{  
         //this.name = name;  
     //}  
 }  
 
 public class Child :Father  
 {  
               
 } 

这段代码是可以编译的,但是,如果把注释标记“//”去除,那么这段代码就无法通过编译。原因就在于,在子类 Child 中的默认构造函数是不带参数的,另外,在默认情况下,一个类的构造函数可以调用其超类中不带参数的构造函数。然而,这个 Father 类的构造函数需要接收一个 String 类型的参数,这意味着编译器无法提供一个默认的构造函数。在没有提供参数的情况下,Child 类的默认构造函数就无调用超类的构造函数。解决办法参照规则 6 即可解决,修改 Child 类:

public class Child :Father  
{  
       public Child(string name) : base(name) { }        
} 

本文参照了 Steven John Metsker 编著的《C# 设计模式》中《构造型模式介绍》一文。

C#构造函数的使用方法就介绍到这里。

C# 构造函数的使用方法的更多相关文章

  1. 分析 js构造函数:对象方法 、类方法 、原型方法

    构造函数方法有对象方法.类方法.原型方法,这些方法在什么时候可以调用,什么时候不能调用,为什么? function Func(name){ this.name=name; this.ff=functi ...

  2. php面向对象之构造函数作用与方法

    什么是构造函数呢?构造函数又有什么作用呢? 构造函数 ,是一种特殊的方法.主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.特别的一个类可以有多个 ...

  3. JS构造函数内的方法与构造函数prototype属性上方法的对比

    本文的目的是让大家理解什么情况下把函数的方法写在JavaScript的构造函数上,什么时候把方法写在函数的 prototype 属性上;以及这样做的好处. 为了阅读方便,我们约定一下:把方法写在构造函 ...

  4. 牛客网Java刷题知识点之构造函数与set方法、与类名同名的一般方法、构造函数中有return语句

    不多说,直接上干货! 通过 牛客网Java刷题知识点之构造函数是什么.一般函数和构造函数什么区别呢.构造函数的重载.构造函数的内存图解 我们对构造函数有了一个比较清楚的认识,当我们在创建对象时,我们会 ...

  5. 为什么字符串类型可以调用构造函数String的方法,却又不是它的实例

    从所周知,在js中定义一个字符串我们有两种办法: var a = new String("a"); var a = "a"; 第一种方法使用构造函数创建,作为S ...

  6. 构造函数的理解(构造函数与 init 方法)

    0. 构造函数与 init 方法 构造方法内部禁止添加任何业务逻辑,如果有业务逻辑,请放在 init 方法中: 1. 构造函数的参数 以下为一个堆实现优先队列(堆的实现借助完全二叉树,而完全二叉树又可 ...

  7. (spring-第3回【IoC基础篇】)spring的依赖注入-属性、构造函数、工厂方法等的注入(基于XML)

    Spring要把xml配置中bean的属性实例化为具体的bean,"依赖注入"是关卡.所谓的"依赖注入",就是把应用程序对bean的属性依赖都注入到spring ...

  8. dojo 四 类的构造函数和父方法的调用

    与java类一样,在Dojo里也可以定义constructor 构造函数,在创建一个实例时可以对需要的属性进行初始化.//定义一个类Mqsy_yj var Mqsy_YJ = declare(null ...

  9. js面向对象小结(工厂模式,构造函数,原型方法,继承)

    最近过了一遍尼古拉斯泽卡斯的高级程序设计第三版(红皮书)第六章:面向对象程序设计,现在把总结出来的东西和大家分享一下. 主要内容如下: 1.工厂模式 2.构造函数模式 3.原型模式 4.继承 一.工厂 ...

随机推荐

  1. linux命令之grep用法介绍

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

  2. 《通过脚本查看哪些ip被占用》shell笔记

    改脚本查看哪些ip被占用. #!/bin/bash for i in {1..10}   //赋予i变量1-10 do   //干什么 ping -c1 -w1 192.168.7.$i && ...

  3. [DevExpress]ChartControl之时间轴示例

    关键代码: using System; using System.Data; using System.Windows.Forms; using DevExpress.XtraCharts; name ...

  4. HIVE中join、semi join、outer join举例详解

    转自 http://www.cnblogs.com/xd502djj/archive/2013/01/18/2866662.html 举例子: hive> select * from zz0;  ...

  5. php后台如何避免用户直接进入方法实例

    这篇文章介绍了php后台如何避免用户直接进入方法实例,有需要的朋友可以参考一下 1)创建BaseController控制器继承Controller(后台的一切操作要继承BaseController): ...

  6. Delphi XE5教程4:程序和单元概述

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误!也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者可 ...

  7. vs2010中安装ASP.NET AJAX Control Toolkit

    方法一: 第一步 下载Ajax Control Toolkit 进入网址http://ajaxcontroltoolkit.codeplex.com/ 即可下载 第二步 解压下载下来的Ajax Con ...

  8. oracle-linux下挂载"移动硬盘" NTFS类型

    环境: ORACLE-LINUX 5.7 全新移动硬盘(未使用过) 移动硬盘空间3T 在默认情况下,Linux系统不支持NTFS分区挂载 1.服务器: A服务器和B服务器为一套ORACLE-RAC,移 ...

  9. spring-mysqlclient开源了

    https://github.com/risedragon/spring-mysqlclient/wiki/spring-mysqlclient-user-guide 开源了一个项目,总结了几年的数据 ...

  10. yiibooster+bsie

    对于使用yii框架来说,如果使用bootstrap框架的话,现在有一个比较方便的使用途径:yiibooster.官网地址是:http://yii-booster.clevertech.biz/当然,我 ...