介绍C#构造函数的使用方法

开发 后端
C#构造函数是一个特殊的类方法。本文就介绍了C#构造函数的使用及其规则。

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

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

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

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

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

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

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

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

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

  1. using System;  
  2.  
  3.  public class Father  
  4.  {  
  5.      //private string name;  
  6.      //public Father(string name)  
  7.      //{  
  8.          //this.name = name;  
  9.      //}  
  10.  }  
  11.  
  12.  public class Child :Father  
  13.  {  
  14.                
  15.  } 

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

  1. public class Child :Father  
  2. {  
  3.        public Child(string name) : base(name) { }        

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

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

【编辑推荐】

  1. 概述C#泛型机制
  2. 浅析C#异步套接字的实现过程
  3. 解析C#关键字之get、set、value、partial、where和yield
  4. 巧思妙解byte常用扩展
  5. 编程入门:C#类型和C#变量
责任编辑:book05 来源: hi.baidu
相关推荐

2009-07-31 14:15:38

C# 构造函数

2011-07-13 11:34:58

CC++时间函数

2009-11-16 16:54:00

PHP构造函数

2009-08-13 13:42:54

C#构造函数

2009-08-25 16:54:28

C# RichText

2009-09-08 14:54:40

C# listBox控

2009-08-14 09:27:27

C#构造函数的特性

2009-08-28 16:31:21

C# treeview

2009-07-30 15:24:13

C#析构函数C#构造函数

2009-08-24 18:09:13

C#构造函数

2010-01-25 14:10:21

C++堆栈

2010-02-02 09:49:02

C++模板

2009-08-13 17:38:42

C#构造函数

2009-12-01 19:02:20

PHP取整函数

2009-09-01 15:25:04

C# default关

2009-07-31 15:37:45

C#静态构造函数

2009-08-20 14:28:00

C#静态构造函数

2009-09-04 11:15:07

选择C#构造函数

2011-07-12 17:18:23

PHPstrtotime

2009-07-31 15:44:02

C#静态构造函数
点赞
收藏

51CTO技术栈公众号