知识大全 构造函数和析构函数

Posted 函数

篇首语:少年意气强不羁,虎胁插翼白日飞。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 构造函数和析构函数相关的知识,希望对你有一定的参考价值。

  类构造函数

  本节将讨论三种类构造函数

  类构造函数的类型

  注释

  实例

  用于创建并初始化类的实例

  私有

  在类之外不可访问的特殊类型实例构造函数 无法用私有构造函数来实例化类

  静态

  在创建第一个实例或引用任何静态成员之前 将自动调用这种构造函数来初始化类 无法直接调用这种构造函数

  备注

  ( ) 实例构造函数

  创建新对象时将调用类构造函数 例如

  Point myPoint = new Point();

  一个类可以有多个构造函数 例如 可以声明一个不带参数的构造函数(如 Point())和一个带参数的构造函数(如 Point(int x int y))

  如果类没有构造函数 将自动生成一个默认的无参数构造函数 并使用默认值初始化对象字段(例如 int 将初始化为 )

  类构造函数可通过base关键字来调用基类的构造函数 例如

  public Cylinder(double radius double height): base(radius height)

  

  

  类构造函数也可通过关键字 this 调用同一个类的另一个构造函数 例如

  public Point(): this( )

  

  

  在前面的示例中 无参数构造函数 Point() 调用了另一个带有两个参数的构造函数 将默认位置初始化为 ( )

  ( )私有构造函数

  私有构造函数是一种特殊的实例构造函数 它通常用在只包含静态成员的类中 如果类具有一个或多个私有构造函数而没有公共构造函数 则不允许其他类(除了嵌套类)创建该类的实例 例如

  class NLog

  

  // Private Constructor:

  private NLog()

  public static double e = ;

  

  声明空构造函数可阻止自动生成默认构造函数 注意 如果您不对构造函数使用访问修饰符 则在默认情况下它仍为私有构造函数 但是 通常显式地使用 private(私有)修饰符来清楚地表明该类不能被实例化

  ( )静态构造函数

  静态构造函数用于初始化类 在创建第一个实例或引用任何静态成员之前 将自动调用静态构造函数来初始化类

  静态构造函数既没有访问修饰符 也没有参数

  在创建第一个实例或引用任何静态成员之前(方法或字段) 将自动调用静态构造函数来初始化类

  无法直接调用静态构造函数 静态构造函数也不能访问非静态成员 它只被调用一次

  在程序中 用户无法控制何时执行静态构造函数

  静态构造函数的典型用途是 当类使用日志文件时 将使用这种构造函数向日志文件中写入项

  结构构造函数

  结构构造函数类似于类构造函数 只是存在以下差异

  n         结构不能包含显式的无参数构造函数 结构成员将自动初始化为它们的默认值

  n         结构不能有以下形式的初始值设定项 base (argument list)

  结构可以声明构造函数 但它们必须带参数 声明结构的默认(无参数)构造函数是错误的 结构成员不能有初始值设定项 总是提供默认构造函数以将结构成员初始化为它们的默认值

  对于结构 不像类那样存在继承 一个结构不能从另一个结构或类继承 结构不能有以下形式的初始值设定项 base (argument list)

  析构函数

  析构函数用于销毁类的实例

  备注

  不能对结构使用析构函数 只能对类使用析构函数

  一个类只能有一个析构函数

  无法继承或重载析构函数

  无法调用析构函数 它们是被自动调用的

  析构函数既没有修饰符 也没有参数 例如 下面是类 MyClass 的析构函数的声明

  ~ MyClass()

  

  // Cleanup statements

  

  该析构函数隐式地对对象的基类调用 Object Finalize 方法 这样 前面的析构函数代码被隐式地转换为

  protected override void Finalize()

  

  try

  

  // Cleanup statements

  

  finally

  

  base Finalize();

  

  

  这意味着对继承链中的所有实例递归地(从派生相近程度最大的到派生相近程度最小的)调用 Finalize 方法

  程序员无法控制何时调用析构函数 因为这由垃圾回收器决定的 垃圾回收器检查是否存在应用程序不再使用的对象 它认为这些对象符合销毁条件并回收这些对象占用的内存 程序退出时也会调用析构函数

  base关键字

  base 关键字用于从派生类中访问基类的成员

  调用基类上已被其他方法重写或隐藏的方法

  指定创建派生类实例时应调用的基类构造函数

  基类访问只能在构造函数 实例方法或实例属性访问器中进行

  静态方法中使用 base 关键字是错误的

  This 关键字

  this 关键字表示类的当前实例

  静态成员没有 this 指针

  访问被相同的名称隐藏的成员

  如

  public Employee(string name string alias)

  

  this name = name;

  this alias = alias;

  

  将this作为参数传递到其他方法

  如

  CalcTax(this);

  声明索引器 例如

  public int this [int param]

  

  get

  

  return array[param];

  

  set

  

  array[param] = value;

  

  

  调用同类中其它的构造函数

cha138/Article/program/net/201311/12990

相关参考

知识大全 C#中构造函数和析构函数的用法(二)

C#中构造函数和析构函数的用法(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  声明了一个类

知识大全 C#中构造函数和析构函数的用法(三)

C#中构造函数和析构函数的用法(三)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Bb=new

知识大全 构造和析构成员函数

    类有一个特殊的成员函数叫做构造成员函数它通常用于初始化类的数据成员在创建对象时会自动调用类的构造成员函数Java中的构造成员函数必须与该类具有相同的名字另外构造成员函数一般都应用public类

知识大全 privte的析构函数和构造函数

  C++中是不允许virtual构造函数的如果在构造函数前加virtual  以vc为例编译器报错为inlineistheonlylegalstorageclassforconstructors  

知识大全 编写类String 的构造函数、析构函数和赋值函数

编写类String的构造函数、析构函数和赋值函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!已知

知识大全 析构函数用于销毁类的实例

  析构函数是通过下面的形式声明的   [attributes]~identifier()destructorbody   其中  attr

知识大全 女程式设计师的求职奋斗史

  不懂虚函数有什么用,不知道除了构造函数,析构函数外还有拷贝函数,还有深浅拷贝之分。每天下班后我没有直接回家,而是留在了单位tel到SUNOS上,开始了我学习unix的计画。我觉

知识大全 JS特殊函数(Function()构造函数、函数直接量)区别

JS特殊函数(Function()构造函数、函数直接量)区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 查找 - 散列技术 - 散列函数的构造方法

  散列函数的构造方法  散列函数的选择有两条标准简单和均匀  简单指散列函数的计算简单快速;  均匀指对于关键字集合中的任一关键字散列函数能以等概率将其映射到表空间的任何一个位置上也就是说散列函数能

知识大全 C#默认构造函数的作用

C#默认构造函数的作用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  构造函数主要用来初始化对象