日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Microsoft.Net框架程序设计学习笔记(11):类型构造器

發(fā)布時(shí)間:2025/7/25 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Microsoft.Net框架程序设计学习笔记(11):类型构造器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  除實(shí)例構(gòu)造器外,CLR還支持類型構(gòu)造器(又稱靜態(tài)構(gòu)造器、類構(gòu)造器、類型初始化器)。類型構(gòu)造器用于設(shè)置一個(gè)類型的初始狀態(tài)。默認(rèn)情況下,一個(gè)類型中沒(méi)有定義類型構(gòu)造器,只能手動(dòng)定義。且類型構(gòu)造器不能有任何參數(shù)。

  示例代碼如下:

class SomeRefType
{
//當(dāng)SomeRefType第一次被訪問(wèn)時(shí)執(zhí)行
static SomeRefType()
{}
}

struct SomeValType
{
//當(dāng)SomeValType第一次被訪問(wèn)時(shí)執(zhí)行
static SomeValType()
{}
}

  類型構(gòu)造器不允許添加任何訪問(wèn)限制符,它的訪問(wèn)限制被自動(dòng)設(shè)為私有方式。類型構(gòu)造器的調(diào)用由CLR負(fù)責(zé),CLR會(huì)在如下時(shí)間之一調(diào)用類型構(gòu)造器。

  • 在類型的第一個(gè)實(shí)例被創(chuàng)建之前,或在類型的非繼承字段或成員第一次被訪問(wèn)前。
  • 在非繼承靜態(tài)字段被第一次訪問(wèn)之前的某個(gè)時(shí)刻。
  •   類型構(gòu)造器一旦被執(zhí)行,它在整個(gè)應(yīng)用程序域的生命周期內(nèi)都不會(huì)再次被調(diào)用 。

      如果一個(gè)類型構(gòu)造器拋出一個(gè)未處理異常,CLR將認(rèn)為該類型不可用。試圖訪問(wèn)其中的任何字段或方法都將拋出TypeInitializationException異常。

      類型構(gòu)造器的代碼只能訪問(wèn)類型的靜態(tài)字段,且通常它的目的就是初始化這些靜態(tài)字段。

      以下代碼:

    class SomeType
    {
    static Int32 x = 5;
    }
      當(dāng)這段代碼被編譯時(shí),編譯器會(huì)為SomeType自動(dòng)產(chǎn)生一個(gè)類型構(gòu)造器,所以這段代碼等價(jià)于如下代碼: class SomeType
    {
    static Int32 x;
    static SomeType() { x= 5; }
    }
      還有一點(diǎn)要注意,類型構(gòu)造器不應(yīng)該調(diào)用其基類的類型構(gòu)造器。這是因?yàn)榛愔械撵o態(tài)字段沒(méi)有被派生類型所繼承。(這可能與大家的“認(rèn)識(shí)”相反,因?yàn)楹芏啻a或在派生類型內(nèi)部引用了基類型的靜態(tài)字段,或通過(guò)派生類型引用了基類的靜態(tài)字段,這不是繼承又是啥呢?事實(shí)上這確實(shí)不是繼承,而是編譯時(shí)靜態(tài)綁定。另外,其他靜態(tài)成員,如靜態(tài)方法、靜態(tài)屬性等,也不會(huì)被派生類所繼承,同樣是編譯時(shí)靜態(tài)綁定。)

    轉(zhuǎn)載于:https://www.cnblogs.com/free722/archive/2011/03/27/1996808.html

    總結(jié)

    以上是生活随笔為你收集整理的Microsoft.Net框架程序设计学习笔记(11):类型构造器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。