天天看點

再說說靜态構造函數

<code>靜态構造函數用于初始化任何靜态資料,或用于執行僅需執行一次的特定操作。</code>

<code>在建立第一個執行個體或引用任何靜态成員之前,将自動調用靜态構造函數</code>

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&lt;Entity.OA.Department&gt; entitiesList = null;

        /// &lt;summary&gt;

        /// 靜态構造方法,在使用任何靜态成員之前會被提前執行

        /// &lt;/summary&gt;

        static DepartmentsService()

            Reload();

        internal static void Reload()

            entitiesList = (from pc in iDepentmentsRepository.GetDepentments()

                            orderby pc.DeptName ascending

                            select pc).ToList();

        #region 樹型部門清單

        /// 虛拟産品類别 

        /// &lt;returns&gt;虛拟産品類别清單&lt;/returns&gt;

        public static Entity.OA.Department GetTree()

            Entity.OA.Department root = new Entity.OA.Department();

            try

            {

                root = entitiesList.Single(

                   item =&gt; item.DeptID.Equals(Entity.OA.Department.ROOTID));//擷取跟節點

                GetSubs(root);

            }

            catch (InvalidOperationException ex)

                ex.ToString();

            return root;

        /// 根據父對象,找到子孫樹

        /// &lt;param name="father"&gt;父對象&lt;/param&gt;

        static public void GetSubs(Entity.OA.Department father)

            father.SubList = entitiesList.Where(item =&gt;

                item.ParentID.Equals(father.DeptID)).ToList();

            father.SubList.ForEach(item =&gt;

                item.Father = father;

                GetSubs(item);

            });

        #endregion

}