再说说静态构造函数

简介:

静态构造函数用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。

在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数

class Program
    {
        static void Main(string[] args)
        {
            static_construct sc = new static_construct(); //这里它执行了普通构造方法和静态构造方法
            static_construct sc2 = new static_construct(); //这里静态构造方法就不会被执行了,它只在第一个类实例时被执行
            Console.WriteLine(static_construct.A);
            Console.ReadKey();
        }
    }

    class static_construct
    {
        static int a = 0;
        public static_construct()
        {
            a += 1;
        }

        static static_construct()
        {
            a += 3;
        }
        public static int A { get { return a; } }
        public static string Info { get; set; }
    }

以下是一个树型部门的例子:

 public class DepartmentsService : IDepartmentsService
    {

        static Data.OA.IDepentmentsRepository iDepentmentsRepository = new Data.OA.DepentmentsRepository();

        static List<Entity.OA.Department> entitiesList = null;

        /// <summary>
        /// 静态构造方法,在使用任何静态成员之前会被提前执行
        /// </summary>
        static DepartmentsService()
        {
            Reload();
        }

        internal static void Reload()
        {
            entitiesList = (from pc in iDepentmentsRepository.GetDepentments()
                            orderby pc.DeptName ascending
                            select pc).ToList();
        }

        #region 树型部门列表
        /// <summary>
        /// 虚拟产品类别 
        /// </summary>
        /// <returns>虚拟产品类别列表</returns>
        public static Entity.OA.Department GetTree()
        {
            Entity.OA.Department root = new Entity.OA.Department();
            try
            {
                root = entitiesList.Single(
                   item => item.DeptID.Equals(Entity.OA.Department.ROOTID));//获取跟节点
                GetSubs(root);

            }
            catch (InvalidOperationException ex)
            {
                ex.ToString();
            }
            return root;
        }


        /// <summary>
        /// 根据父对象,找到子孙树
        /// </summary>
        /// <param name="father">父对象</param>
        static public void GetSubs(Entity.OA.Department father)
        {
            father.SubList = entitiesList.Where(item =>
                item.ParentID.Equals(father.DeptID)).ToList();
            father.SubList.ForEach(item =>
            {
                item.Father = father;
                GetSubs(item);
            });

        }
        #endregion

}

本文转自博客园张占岭(仓储大叔)的博客,原文链接:再说说静态构造函数,如需转载请自行联系原博主。

目录
相关文章
【构造函数】解析构造函数的作用
构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。
106 0
21-对象特性-构造函数和析构函数
21-对象特性-构造函数和析构函数
|
安全 编译器 C++
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(二)
朋友们好啊,今天终于更新了。我是柠檬叶子C,本章将继续讲解C++中的面向对象的知识点,本篇主要讲解默认成员函数中的构造函数、析构函数和拷贝构造函数。还是和以前一样,我们将由浅入深地去讲解,以 "初学者" 的角度去探索式地学习。会一步步地推进讲解,而不是直接把枯燥的知识点倒出来,应该会有不错的阅读体验。如果觉得不错,可以 "一键三连" 支持一下博主!你们的关注就是我更新的最大动力!Thanks ♪ (・ω・)ノ
93 0
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(二)
|
编译器 C++
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(一)
朋友们好啊,今天终于更新了。我是柠檬叶子C,本章将继续讲解C++中的面向对象的知识点,本篇主要讲解默认成员函数中的构造函数、析构函数和拷贝构造函数。还是和以前一样,我们将由浅入深地去讲解,以 "初学者" 的角度去探索式地学习。会一步步地推进讲解,而不是直接把枯燥的知识点倒出来,应该会有不错的阅读体验。如果觉得不错,可以 "一键三连" 支持一下博主!你们的关注就是我更新的最大动力!Thanks ♪ (・ω・)ノ
122 0
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(一)
学生类-构造函数
学生类-构造函数
156 0
|
编译器
类的构造函数
类的构造函数
154 0
|
算法 C#
静态变量 静态对象 静态函数和非静态函数的区别。(我的理解,大家看看对不对)
先明确一下 语言:asp.net C# 1、静态变量:static string str1 = "1234"; 2、静态对象static SqlConnection cn = new SqlConnection(); 3、静态函数class aa{    public static str...
862 0
|
Java
构造器、对象数组、对象属性、静态实例块、this关键字
它的名字:构造函数、构造方法、初始化方法。 构造条件? 以后我们如何去使用构造器? 你觉得那些对象中那些属性值是必要的,你就在构造器中提出来(就是你如果想创造对象必须要传入我所需要的参数) public class Dog {//这里就是一个简单的类、狗的类 String name; .
1122 0