`
tmj
  • 浏览: 5479 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

静态构造函数(摘录)

阅读更多

静态构造函数主要用来初始化静态变量的值.
这种函数只执行一次,在第一次创建类的对象的时候,就会自动调用它.
可以参考一下下面的代码.

using System;

class Welcome
{
public Welcome()
{
Console.WriteLine("构造函数 Welcome()");
}

static Welcome()
{
Console.WriteLine("构造函数 static Welcome()");
}

static void Main()
{
new Welcome();
new Welcome();
Console.ReadLine();
}
}

执行结果:
构造函数 static Welcome()
构造函数 Welcome()
构造函数 Welcome()


又比如下面的代码

public class User
  {
   static private int count;
   static public int Count
   {
    get
    {
     return count;
    }
   }
   public User()
   {
    count++;
   }
   static User()
   {
    count = 0;
   }
  }
  
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   Response.Write("User Count = " + User.Count);
   Response.Write("<hr/>Creating User Alex.");
   User Alex = new User();
   Response.Write("<br/>User Count = " + User.Count);
   Response.Write("<hr/>Creating User Rob.");
   User Rob = new User();
   Response.Write("<br/>User Count = " + User.Count);
   Response.Write("<hr/>Creating User Jake.");
   User Jake = new User();
   Response.Write("<br/>User Count = " + User.Count);   
  }

这段代码的执行结果是:
User Count = 0
----------------------------------------------------------------------

----------
Creating User Alex.
User Count = 1
----------------------------------------------------------------------

----------
Creating User Rob.
User Count = 2
----------------------------------------------------------------------

----------
Creating User Jake.
User Count = 3


如果一些操作只希望被执行一次。这时候就可以考虑使用静态构造函数。当然如果设计的面向对象一些的话,那就是使用单件模式了。


静态构造函数可以在第一次调用静态类的任何方法、属性时自动调用,所以在静态构造函数里抛出的异常捕获比较麻烦。

静态构造函数自动被调用,不能被显式调用。虽然提供了许多约束条件,但是静态构造函数执行的确切时间和顺序是不确定的:
一个类的静态构造函数在这个类的任何实例被创建前执行。
一个类的静态构造函数在类的任何静态成员被引用前执行。
一个类的静态构造函数在它的所有派生类的静态构造函数执行之后执行。
一个类的静态构造函数从不会被执行一次以上。

分享到:
评论

相关推荐

    google C++ 风格指南 - 中文版

    3.1. 构造函数的职责 3.2. 默认构造函数 3.3. 显式构造函数 3.4. 拷贝构造函数 3.5. 结构体 VS. 类 3.6. 继承 3.7. 多重继承 3.8. 接口 3.9. 运算符重载 3.10. 存取控制 3.11. 声明顺序 3.12. 编写简短...

    单例设计模式个人总结+摘录

    - **实现**:通过将构造函数私有化并创建一个私有的静态变量来持有单例对象,再提供一个公共的静态方法用于返回这个单例对象。 - **特点**:效率较高,但由于在类加载时就已经创建了实例,因此不支持延迟加载。 -...

    vim-react-snippets:在React中开发有用的代码片段(Javascript和Typescript)

    vim-react-snippets 用于...Javascript范例打字稿示例钩子的例子目录 React类导出React类组件React Class构造函数静态属性类型静态默认道具React类函数(箭头绑定类函数) 功能组件(JavaScript) 功能组件导出简单功

    PHP面向对象面试题.pdf

    在文件中的PHP代码示例,定义了一个名为`Mysql`的类,其中包含了一个私有静态属性`$instance`用于实现单例模式,一个私有属性`$conn`用来存储数据库连接,以及一个私有构造函数和公共的`getInstance`方法用来获取类...

    BeautifulKotlin:我在谈论Kotlin时使用的摘录

    - **简洁的语法**:没有分号、getter/setter自动生成、简洁的构造函数等,减少了冗余代码。 ### 3. 类与对象 在Kotlin中,类的定义比Java更为简单,可以有接口实现、抽象类、密封类等。对象声明可以直接创建类的...

    java单词表

    9. Constructor [kənˈstrʌktə(r)]:构造函数,指的是用于初始化对象的特殊方法。 10. Encapsulation [inˌkæpsjuˈleiʃən]:封装,指的是将数据和方法封装在一个单元中。 第二章 1. Extend [ɪkˈstend]:...

    Java面试共166页.doc

    - `abstract class`可以有构造函数,而`interface`不能。 - 类可以实现多个`interface`,但只能继承一个`abstract class`。 以上知识点仅是部分摘录,完整的Java面试指南可能包含了更多深入的技术细节和实战经验...

    乌迪奇·Kotlin

    - 掌握函数和类的使用,包括构造函数、属性、继承和接口。 - 学会利用高阶函数、lambda表达式和闭包进行函数式编程。 - 了解Kotlin中的null安全性和类型系统,避免常见的空指针异常。 - 熟悉协程,以便在Android或...

    OReilly.Modern.Java.Recipes.2017.8

    基础部分涉及Lambda表达式、方法引用、构造器引用、函数式接口、接口中的默认方法和静态方法。这些都是Java 8引入的函数式编程的关键特性,为编写简洁和灵活的代码提供了强大的工具。 章节《The java.util.function...

Global site tag (gtag.js) - Google Analytics