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#法式設計有所贊助。