最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中靜態(tài)構(gòu)造函數(shù)的幾點說明介紹

 更新時間:2014年01月17日 10:04:39   作者:  
本篇文章主要是對C#中靜態(tài)構(gòu)造函數(shù)的幾點說明進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助

靜態(tài)構(gòu)造函數(shù)是C#的一個新特性,其實好像很少用到。不過當我們想初始化一些靜態(tài)變量的時候就需要用到它了。這個構(gòu)造函數(shù)是屬于類的,而不是屬于哪里實例的,就是說這個構(gòu)造函數(shù)只會被執(zhí)行一次。也就是在創(chuàng)建第一個實例或引用任何靜態(tài)成員之前,由.NET自動調(diào)用。

復(fù)制代碼 代碼如下:

class SimpleClass
{
// Static constructor
static SimpleClass()
{
//
}
}

在使用靜態(tài)構(gòu)造函數(shù)的時候應(yīng)該注意幾點:

1、靜態(tài)構(gòu)造函數(shù)既沒有訪問修飾符,也沒有參數(shù)。因為是.NET調(diào)用的,所以像public和private等修飾符就沒有意義了。

2、是在創(chuàng)建第一個類實例或任何靜態(tài)成員被引用時,.NET將自動調(diào)用靜態(tài)構(gòu)造函數(shù)來初始化類,也就是說我們無法直接調(diào)用靜態(tài)構(gòu)造函數(shù),也就無法控制什么時候執(zhí)行靜態(tài)構(gòu)造函數(shù)了。

3、一個類只能有一個靜態(tài)構(gòu)造函數(shù)。

4、無參數(shù)的構(gòu)造函數(shù)可以與靜態(tài)構(gòu)造函數(shù)共存。盡管參數(shù)列表相同,但一個屬于類,一個屬于實例,所以不會沖突。

5、最多只運行一次。

6、靜態(tài)構(gòu)造函數(shù)不可以被繼承。

7、如果沒有寫靜態(tài)構(gòu)造函數(shù),而類中包含帶有初始值設(shè)定的靜態(tài)成員,那么編譯器會自動生成默認的靜態(tài)構(gòu)造函數(shù)。
 

靜態(tài)構(gòu)造函數(shù)趣談!
類的靜態(tài)構(gòu)造函數(shù)也叫類型構(gòu)造器,靜態(tài)構(gòu)造器,他調(diào)用的時刻由CLR來控制:

CLR會選擇如下時間之一來調(diào)用靜態(tài)構(gòu)造函數(shù):
 1,在類型的第一個實例創(chuàng)建之前,或類型的非繼承字段或成員第一次訪問之前。這里的“之前”,代表前后銜接的意思。這里的時刻是精確的!

 2,在非繼承的靜態(tài)字段或成員第一次訪問之前的某個時刻,具體時刻不定!

由于調(diào)用的時刻不確定,所以我們最好不要編寫依賴于特定的靜態(tài)構(gòu)造函數(shù)的執(zhí)行順序的代碼,這樣很容易產(chǎn)生不可預(yù)料的后果!

下面大家看看以下的Demo,我們來更加深入的看看靜態(tài)構(gòu)造函數(shù)的一些有趣的行為:

Demo1:

復(fù)制代碼 代碼如下:

static void Main(string[] args)
{
Console.WriteLine(B.strText); 
}
public class A
{
public static string strText;
static A()
{
strText = "aaaa"; 
}
}
public class B : A
{
static B()
{
strText = "bbbb";  
}
}

大家猜猜結(jié)果是什么,可能有人認為輸出的是bbbb,因為訪問B.strText需要調(diào)用B類的靜態(tài)構(gòu)造函數(shù)static B()。實際上輸出的結(jié)果是aaaa,因為strText是類A的靜態(tài)字段,而類B只是繼承了這個字段,所以這里會調(diào)用類A的靜態(tài)構(gòu)造函數(shù)static A(),所以輸出結(jié)果是aaaa。這也沒有什么真正可說的,相信大家都能看出這個結(jié)果的。

下面看看第二個Demo:

Demo2:

復(fù)制代碼 代碼如下:

static void Main(string[] args)
{
B b = new B(); 
A a = new A();

Console.WriteLine(B.strText); 

}
public class A
{
public static string strText;
static A()
{
strText = "aaaa";  
}
}
public class B : A
{
static B()
{
strText = "bbbb";  
}
}


大家猜猜輸出結(jié)果是什么,可能有人認為會輸出aaaa,理由是new B()之前會調(diào)用static B(),然后new A()之前需要調(diào)用static A,這樣結(jié)果是aaaa,但是實際情況并非如果,正確的結(jié)果是bbbb,原因如下:

在執(zhí)行  new B(); 之前,B類的靜態(tài)構(gòu)造函數(shù)會調(diào)用,也就是會調(diào)用:
static B()
{
 strText="bbbb";
}

當執(zhí)行到strText=“bbbb"的時候,這時需要訪問strText字段,而B的strText字段是從A類繼承的,所以這里需要會先調(diào)用:
static A()
{
 strText="aaaa";
}

執(zhí)行這個函數(shù)以后strText的值是aaaa

然后代碼又回到static B()中,這時才執(zhí)行static B()中的strText="bbbb"這行,所以strText這時的值是bbbb

當執(zhí)行A a=new A();的時候,不會在調(diào)用A的靜態(tài)構(gòu)造函數(shù)了,因為前面已經(jīng)調(diào)用過了,靜態(tài)函數(shù)在整個應(yīng)用程序域的生命周期中只會調(diào)用一次!

請大家多指教?。?/P>

相關(guān)文章

  • C#中實現(xiàn)CAN通信的使用

    C#中實現(xiàn)CAN通信的使用

    本文主要介紹了C#中實現(xiàn)CAN通信的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-04-04
  • C#模擬瀏覽器實現(xiàn)自動操作

    C#模擬瀏覽器實現(xiàn)自動操作

    這篇文章主要為大家詳細介紹了如何使用C#實現(xiàn)模擬瀏覽器實現(xiàn)自動操作,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-11-11
  • C#實現(xiàn)的SQL備份與還原功能示例

    C#實現(xiàn)的SQL備份與還原功能示例

    這篇文章主要介紹了C#實現(xiàn)的SQL備份與還原功能,結(jié)合具體實例形式分析了C#操作數(shù)據(jù)庫實現(xiàn)SQL備份與還原相關(guān)的控件、SQL連接、文件等操作技巧,需要的朋友可以參考下
    2017-06-06
  • 解決Unity無限滾動復(fù)用列表的問題

    解決Unity無限滾動復(fù)用列表的問題

    這篇文章主要介紹了Unity無限滾動復(fù)用列表,無限滾動復(fù)用ScrollView就是解決這種問題,還可以用來做朋友圈,聊天等,需要的朋友可以參考下
    2022-04-04
  • C#簡單發(fā)送email的方法

    C#簡單發(fā)送email的方法

    這篇文章主要介紹了C#簡單發(fā)送email的方法,涉及C#發(fā)送Email的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#定義簡單的反射工廠實例分析

    C#定義簡單的反射工廠實例分析

    這篇文章主要介紹了C#定義簡單的反射工廠的用法,實例分析了反射工廠的原理與使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • C#實現(xiàn)偽裝文件夾功能

    C#實現(xiàn)偽裝文件夾功能

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)偽裝文件夾的功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C#中Array的存儲結(jié)構(gòu)簡單介紹

    C#中Array的存儲結(jié)構(gòu)簡單介紹

    本文將從一個數(shù)組的基礎(chǔ)操作開始,逐步來推導數(shù)組的在C#基礎(chǔ)操作、數(shù)組在CoreCLR的維護策略,數(shù)組在C++的內(nèi)存分配等階段具體是如何實現(xiàn)的,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • 基于c#用Socket做一個局域網(wǎng)聊天工具

    基于c#用Socket做一個局域網(wǎng)聊天工具

    目前基于Internet的即時聊天工具已經(jīng)做的非常完美,本文介紹了基于c#用Socket做一個局域網(wǎng)聊天工具,有需要的朋友可以看一下。
    2016-10-10
  • C#儀器數(shù)據(jù)文件解析Excel文件的方法淺析(xls、xlsx)

    C#儀器數(shù)據(jù)文件解析Excel文件的方法淺析(xls、xlsx)

    這篇文章主要給大家介紹了關(guān)于C#儀器數(shù)據(jù)文件如何解析Excel文件的方法,包括解析xls、xlsx兩種格式,文中介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-10-10

最新評論

枞阳县| 宁德市| 开封县| 江北区| 南郑县| 唐河县| 阿坝县| 惠安县| 阿鲁科尔沁旗| 永兴县| 鹤岗市| 怀宁县| 饶河县| 平度市| 桦甸市| 彭水| 乐安县| 嘉定区| 区。| 祁连县| 沭阳县| 汉沽区| 汝城县| 山阳县| 周宁县| 湖口县| 电白县| 凉城县| 蒙阴县| 新昌县| 集贤县| 都安| 绥德县| 哈尔滨市| 江达县| 尉氏县| 治县。| 溧水县| 南昌县| 拜泉县| 秦皇岛市|