再说说静态构造函数

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

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

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

}

posted @   张占岭  阅读(421)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示