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. cpoint

    #include<iostream> #include<math.h> using namespace std; class CPoint { public: int cpoi ...

  2. NSURLConnection ignore unverified certificate error when sending a synchronise request

    Private API, use with caution. As we all know, it's easy to ignore the unverified certificate error ...

  3. SAP存货账龄分析之库存获取

    前段时间上面要求做一个历史库存账龄分析,取历史数据的时候一直纠结于用mchb/mchbh/mska/mskah等实时和历史库存表,然而试来试去还是不能成功,于是决定DEBUG下MB5B的源代码,测试了 ...

  4. 启语外语培训网SEO历程

    网站开发完成已经好长时间了,但收录一直上不去,排名也上不去.我这篇文章主要是分析一下网站的SEO历程 网址:http://waiyupx.cheer-edu.net/School/School-5.h ...

  5. 基础学习总结(六)--getContentRolver()的应用、内容监听者ContentObserver

    ContentResolver / getContentResolver()   外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,在Activity当 ...

  6. FastDFS4 + Ubuntu12安装及部署

    1. 安装libevent 如果需要使用http进行下载,需要安装这个组件. 2. 安装fastdfs 3. 配置fastdfs 4. 安装nginx 问题4.1:安装nginx启动后访问原先资源UR ...

  7. 在Linux中三种让crontab每秒执行任务的方法

    第一种方法: 1.创建脚本文件 cat phplog.sh 2.编辑脚本内容 #!/bin/bash while : ;do /home/scripts.sh 2>/dev/null & ...

  8. LiteHttp:一款‘智能’的HTTP框架类库

    LiteHttp:一款‘智能’的HTTP框架类库(转自github) 简介 LiteHttp是一款简单.智能.灵活的HTTP框架库,它在请求和响应层面做到了全自动构建和解析,主要用于Android快速 ...

  9. 基于lnmp.org的xdebug安装

    1. 下载xdebug wget http://xdebug.org/files/xdebug-2.3.3.tgz 2. 创建一个目录: mkdir ./xdebug 3. 复制xdebug包到xde ...

  10. DOS命令之----Netstat+Task以及相关使用

    作为一个初步接触电脑的人,在学习Android的过程中,遇到各种问题,今天遇到了.这样一个错误提示: The connection to adb is down, and a severe error ...