国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

C# 靜態(tài)構(gòu)造函數(shù)使用

2019-11-17 02:17:33
字體:
供稿:網(wǎng)友

C# 靜態(tài)構(gòu)造函數(shù)使用

2015-06-29 23:18 by xtechnet, ... 閱讀, ... 評論, 收藏, 編輯

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

現(xiàn)在碰到這樣一個場景:提供一個靜態(tài)方法,這個靜態(tài)方法在不同的地方使用,涉及到一個參數(shù)值不同,而其他內(nèi)容都完全一致。如果是將靜態(tài)方法的內(nèi)容復(fù)制出來做成另外一個方法,代碼冗余太多,做法不可取。使用靜態(tài)構(gòu)造函數(shù)處理靜態(tài)變量,則可以盡最大程度簡化代碼。如下示例:

/// <summary>/// 基類/// </summary>public class A{    public static string Field = "original-test";    //靜態(tài)構(gòu)造函數(shù)    static A()    {        Field = "test-a";    }    public static void Test()    {        Console.WriteLine("the output is : " + Field);    }}/// <summary>/// 子類/// </summary>public class B : A{    //靜態(tài)構(gòu)造函數(shù)    static B()    {        Field = "test-b";    }    public static new void Test()    {        A.Test();//調(diào)用基類方法,這個對基類Test函數(shù)的覆蓋很重要,沒有這個,那么調(diào)用B.Test()的時候其實是調(diào)用基類的Test方法。
} }

如代碼所示,類型B繼承于基類型A。B中的靜態(tài)構(gòu)造函數(shù)對靜態(tài)變量Field進行賦值,這個會在調(diào)用子類中的Test方法之前調(diào)用,而B中Test方法的實現(xiàn)則是完全調(diào)用基類A的Test方法,這樣,在方法執(zhí)行的時候,方法中使用的靜態(tài)變量Field的值就是在B的靜態(tài)構(gòu)造函數(shù)中賦值之后的test-b。

調(diào)用結(jié)果如下:

static void Main(string[] args){    A.Test();//輸出the output is : test-a    B.Test();//輸出the output is : test-b    Console.ReadLine();}

A.Test()調(diào)用,F(xiàn)ield值為test-a;而B.Test()調(diào)用,F(xiàn)ield值為test-b。

這樣,當(dāng)靜態(tài)方法的實現(xiàn)邏輯復(fù)雜的時候,就可以針對需要將這個方法進行個性化實現(xiàn)的需求的時候簡化代碼:子類在靜態(tài)構(gòu)造函數(shù)中對靜態(tài)變量重新賦值,然后重新實現(xiàn)基類中的靜態(tài)方法。

(注意,后面的重新實現(xiàn)基類中的靜態(tài)方法是必須的,否則輸出B.Test()的時候,調(diào)用基類的Test()方法,使用的Field變量則是基類中的變量,那時輸出則變成如下:)

static void Main(string[] args){    A.Test();//輸出the output is : test-a    B.Test();//輸出the output is : test-a。因為沒有覆蓋子類方法,等同于A.Test()    Console.ReadLine();}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 金塔县| 琼海市| 绥阳县| 门源| 扶风县| 新乡县| 黔东| 涟水县| 吉安市| 台中县| 海盐县| 漳州市| 郓城县| 南京市| 绥棱县| 苏尼特左旗| 侯马市| 奇台县| 仁化县| 阿荣旗| 峨眉山市| 新营市| 宁波市| 资兴市| 安康市| 太仓市| 呼玛县| 中宁县| 越西县| 宜川县| 额敏县| 潮安县| 咸丰县| 抚顺市| 苗栗县| 承德市| 东海县| 盖州市| 承德市| 屏山县| 通渭县|