C#靜態結構函數用法實例剖析。本站提示廣大學習愛好者:(C#靜態結構函數用法實例剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#靜態結構函數用法實例剖析正文
本文實例講述了C#靜態結構函數用法。分享給年夜家供年夜家參考。詳細以下:
當我們想初始化一些靜態變量的時刻,就須要用到靜態結構函數了。這個靜態結構函數屬於類,而不屬於實例,就是說這個結構函數只會被履行一次,即:在創立第一個實例或援用任何靜態成員之前,由.NET主動挪用。
如今碰著如許一個場景:供給一個靜態辦法,這個靜態辦法在分歧的處所應用,觸及到一個參數值分歧,而其他內容都完整分歧。假如是將靜態辦法的內容復制出來做成別的一個辦法,代碼冗余太多,做法弗成取。應用靜態結構函數處置靜態變量,則可以盡最年夜水平簡化代碼。以下示例:
/// <summary> /// 基類 /// </summary> public class A { public static string Field = "original-test"; //靜態結構函數 static A() { Field = "test-a"; } public static void Test() { Console.WriteLine("the output is : " + Field); } } /// <summary> /// 子類 /// </summary> public class B : A { //靜態結構函數 static B() { Field = "test-b"; } public static new void Test() { A.Test(); //挪用基類辦法,這個對基類Test函數的籠罩很主要,沒有這個,那末挪用B.Test()的時刻實際上是挪用基類的Test辦法。 } }
如代碼所示,類型B繼續於基類型A。B中的靜態結構函數對靜態變量Field停止賦值,這個會在挪用子類中的Test辦法之前挪用,而B中Test辦法的完成則是完整挪用基類A的Test辦法,如許,在辦法履行的時刻,辦法中應用的靜態變量Field的值就是在B的靜態結構函數中賦值以後的test-b。
挪用成果以下:
static void Main(string[] args) { A.Test();//輸入the output is : test-a B.Test();//輸入the output is : test-b Console.ReadLine(); }
A.Test()挪用,Field值為test-a;而B.Test()挪用,Field值為test-b。
如許,當靜態辦法的完成邏輯龐雜的時刻,便可以針對須要將這個辦法停止特性化完成的需求的時刻簡化代碼:子類在靜態結構函數中對靜態變量從新賦值,然後從新完成基類中的靜態辦法。
(留意,前面的從新完成基類中的靜態辦法是必需的,不然輸入B.Test()的時刻,挪用基類的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(); }
願望本文所述對年夜家的C#法式設計有所贊助。