欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中Class的實(shí)例化過程詳解

 更新時間:2024年09月29日 09:08:56   作者:鯉籽鯤  
文章詳細(xì)闡述了C#中類的成員,包括靜態(tài)字段、靜態(tài)構(gòu)造函數(shù)、實(shí)例字段等的初始化順序,在無繼承情況下,實(shí)例化分為聲明時初始化和構(gòu)造函數(shù)中初始化兩種,分別有明確的執(zhí)行順序,需要的朋友可以參考下

前言

在平常開發(fā)的過程中,經(jīng)常需要new 一個class,但是呢,由于忽略一些基礎(chǔ)語法知識,不了解各成員的實(shí)例化順序,導(dǎo)致代碼中一些不必要的錯誤,所以在此做個總結(jié)!

一、class的成員

class 中的成員有:字段、常量、屬性、方法、構(gòu)造函數(shù)、事件、終結(jié)器、索引器、運(yùn)算符、嵌套類型

關(guān)于成員詳情可查:成員(C# 編程指南)

另外本文實(shí)例化過程會著重說明:靜態(tài)字段,靜態(tài)構(gòu)造函數(shù),實(shí)例字段,屬性,構(gòu)造函數(shù) 等幾個常用成員的初始化過程。

二、實(shí)例化順序(無繼承情況)

在當(dāng)前實(shí)例化的過程中也會分兩種情況,

  • 一種就是直接在聲明變量的時候就初始化,如 private object obj = new object();
  • 另一種就是申明的時候只管聲明,初始化的工作均在構(gòu)造函數(shù)中完成,如private object obj ;

1.聲明時進(jìn)行初始化

代碼如下(示例):

	//該類僅用于打印實(shí)例化時候的信息,用于標(biāo)記過程
    public class Msg
    {
        public Msg(string info)
        {
            Console.WriteLine(info);
        }
    }
    public class User
    {       
        public static Msg StaticField = new Msg("靜態(tài)字段初始化");
        private Msg privateField = new Msg("私有字段初始化");
        private Msg _info;

        public Msg Info
        {
            get 
            {
                Console.WriteLine("進(jìn)入get設(shè)置器");
                return _info; 
            }
            set
            {
                Console.WriteLine("進(jìn)入set設(shè)置器");
                _info = value; 
            }
        }

        static User()
        {
            Console.WriteLine("靜態(tài)構(gòu)造函數(shù)正在執(zhí)行");
        }

        public User()
        {
            Console.WriteLine("構(gòu)造函數(shù)正在執(zhí)行");
        }
    }

通過實(shí)例化User類,觀察實(shí)例化過程:

        static void Main(string[] args)
        {
            User user = new User();
            Console.WriteLine("獲取屬性"+user.Info);
            user.Info = new Msg("使用屬性");
            Console.ReadLine();
        }

通過以上案例可知實(shí)例化過程為:

  • 靜態(tài)字段
  • 靜態(tài)構(gòu)造函數(shù)
  • 實(shí)例字段
  • 構(gòu)造函數(shù)
  • 屬性則是在使用時會被初始化

2.在構(gòu)造函數(shù)中初始化

在聲明時不再初始化,統(tǒng)一在構(gòu)造函數(shù)中初始化

    public class User
    {       
        public static Msg StaticField ;
        private Msg privateField;
        private Msg _info;

        public Msg Info
        {
            get 
            {
                Console.WriteLine("進(jìn)入get設(shè)置器");
                return _info; 
            }
            set
            {
                Console.WriteLine("進(jìn)入set設(shè)置器");
                _info = value; 
            }
        }

        static User()
        {
            Console.WriteLine("靜態(tài)構(gòu)造函數(shù)正在執(zhí)行");
        }

        public User()
        {
            Console.WriteLine("構(gòu)造函數(shù)正在執(zhí)行");
            StaticField = new Msg("靜態(tài)字段初始化");
            privateField = new Msg("實(shí)例字段初始化");          
        }
    }

通過以上案例可知實(shí)例化過程為:

  • 在構(gòu)造函數(shù)外初始化的順序,仍舊是 靜態(tài)字段=》靜態(tài)構(gòu)造函數(shù)=》實(shí)例字段=》構(gòu)造函數(shù)
  • 在構(gòu)造函數(shù)之內(nèi)的初始化順序,就是按照代碼的編寫順序執(zhí)行。
  • 屬性則是在使用時會被初始化

三、實(shí)例化順序(有繼承情況)

    public class User
    {
        public static Msg StaticField = new Msg("父類 靜態(tài)字段初始化");
        private Msg privateField = new Msg("父類 實(shí)例字段初始化");
        private Msg _info;

        public Msg Info
        {
            get
            {
                Console.WriteLine("進(jìn)入get設(shè)置器");
                return _info;
            }
            set
            {
                Console.WriteLine("進(jìn)入set設(shè)置器");
                _info = value;
            }
        }

        static User()
        {
            Console.WriteLine("父類 靜態(tài)構(gòu)造函數(shù)正在執(zhí)行");
        }

        public User()
        {
            Console.WriteLine("父類 構(gòu)造函數(shù)正在執(zhí)行");
        }
    }

    public class VipUser : User
    {
        public static Msg StaticVipField = new Msg("子類 靜態(tài)字段初始化");
        private Msg privateVipField = new Msg("子類 實(shí)例字段初始化");
        private Msg _vipInfo;

        public Msg VipInfo
        {
            get
            {
                Console.WriteLine("進(jìn)入get設(shè)置器");
                return _vipInfo;
            }
            set
            {
                Console.WriteLine("進(jìn)入set設(shè)置器");
                _vipInfo = value;
            }
        }

        public VipUser()
        {
            Console.WriteLine("子類 構(gòu)造函數(shù)初始化完成");
        }
    }
        static void Main(string[] args)
        {
            VipUser user = new VipUser();
            Console.ReadLine();
        }

通過以上案例可知實(shí)例化過程為:

  • 先初始化子類的靜態(tài)成員:靜態(tài)字段=》靜態(tài)構(gòu)造函數(shù)
  • 再實(shí)例化子類的實(shí)例成員:實(shí)例字段
  • 再初始化父類的靜態(tài)成員:靜態(tài)字段=》靜態(tài)構(gòu)造函數(shù)
  • 再實(shí)例化父類的實(shí)例成員:實(shí)例字段
  • 再實(shí)例化父類的構(gòu)造函數(shù)
  • 最后實(shí)例化子類的構(gòu)造函數(shù)

結(jié)語

到此這篇關(guān)于C#中Class的實(shí)例化過程詳解的文章就介紹到這了,更多相關(guān)C# Class實(shí)例化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#設(shè)計(jì)模式之工廠模式

    C#設(shè)計(jì)模式之工廠模式

    本文詳細(xì)講解了C#設(shè)計(jì)模式之工廠模式,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • C#多線程之任務(wù)的用法詳解

    C#多線程之任務(wù)的用法詳解

    本文詳細(xì)講解了C#多線程之任務(wù)的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C# 各種導(dǎo)出的方法總結(jié)

    C# 各種導(dǎo)出的方法總結(jié)

    本篇文章主要介紹了C# 各種導(dǎo)出方法的相關(guān)知識,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05
  • C#學(xué)習(xí)基礎(chǔ)概念二十五問

    C#學(xué)習(xí)基礎(chǔ)概念二十五問

    C#學(xué)習(xí)基礎(chǔ)概念二十五問...
    2007-04-04
  • C#實(shí)現(xiàn)飛行棋游戲

    C#實(shí)現(xiàn)飛行棋游戲

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)飛行棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C# FTP操作類分享

    C# FTP操作類分享

    這篇文章主要為大家分享了C# FTP操作類的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C#中String和StringBuilder的簡介與區(qū)別

    C#中String和StringBuilder的簡介與區(qū)別

    今天小編就為大家分享一篇關(guān)于C#中String和StringBuilder的簡介與區(qū)別,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • C#程序打成 一鍵安裝包-InstallShield教程

    C#程序打成 一鍵安裝包-InstallShield教程

    最近找到個打包工具,挺不錯的。下面簡單的介紹下使用方法
    2012-01-01
  • 利用C#編寫一個Windows服務(wù)程序的方法詳解

    利用C#編寫一個Windows服務(wù)程序的方法詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用C#編寫一個Windows服務(wù)程序,文中的實(shí)現(xiàn)方法講解詳細(xì),具有一定的參考價值,感興趣的可以了解一下
    2023-03-03
  • 利用C#實(shí)現(xiàn)合并Word文檔功能

    利用C#實(shí)現(xiàn)合并Word文檔功能

    合并Word文檔可以快速地將多份編輯好的文檔合在一起,避免復(fù)制粘貼時遺漏內(nèi)容,以及耗費(fèi)不必要的時間。本文將分為以下兩部分介紹如何通過C#合并Word文檔,并附上VB.NET代碼供大家參考,希望對大家有所幫助
    2022-12-12

最新評論