欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#靜態(tài)構造函數(shù)用法實例分析

 更新時間:2015年06月30日 11:16:44   作者:xtechnet  
這篇文章主要介紹了C#靜態(tài)構造函數(shù)用法,以實例形式較為詳細的分析了C#靜態(tài)構造函數(shù)的用途、實現(xiàn)方法及使用技巧,需要的朋友可以參考下

本文實例講述了C#靜態(tài)構造函數(shù)用法。分享給大家供大家參考。具體如下:

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

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

/// <summary>
/// 基類
/// </summary>
public class A
{
  public static string Field = "original-test";
  //靜態(tài)構造函數(shù)
  static A()
  {
    Field = "test-a";
  }
  public static void Test()
  {
    Console.WriteLine("the output is : " + Field);
  }
}
/// <summary>
/// 子類
/// </summary>
public class B : A
{
  //靜態(tài)構造函數(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)構造函數(shù)對靜態(tài)變量Field進行賦值,這個會在調(diào)用子類中的Test方法之前調(diào)用,而B中Test方法的實現(xiàn)則是完全調(diào)用基類A的Test方法,這樣,在方法執(zhí)行的時候,方法中使用的靜態(tài)變量Field的值就是在B的靜態(tài)構造函數(shù)中賦值之后的test-b。

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

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。

這樣,當靜態(tài)方法的實現(xiàn)邏輯復雜的時候,就可以針對需要將這個方法進行個性化實現(xiàn)的需求的時候簡化代碼:子類在靜態(tài)構造函數(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();
}

希望本文所述對大家的C#程序設計有所幫助。

相關文章

  • c# 將Minio.exe注冊成windows服務

    c# 將Minio.exe注冊成windows服務

    這篇文章主要介紹了c# 如何將Minio.exe注冊成windows服務,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-11-11
  • C#驗證給定字符串形式日期是否合法的方法

    C#驗證給定字符串形式日期是否合法的方法

    這篇文章主要介紹了C#驗證給定字符串形式日期是否合法的方法,實例分析了C#針對字符串及日期的操作技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • C#實現(xiàn)飛行棋小游戲

    C#實現(xiàn)飛行棋小游戲

    這篇文章主要為大家詳細介紹了C#實現(xiàn)飛行棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Unity實現(xiàn)俄羅斯方塊

    Unity實現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C#?微信支付回調(diào)驗簽處理的實現(xiàn)

    C#?微信支付回調(diào)驗簽處理的實現(xiàn)

    在微信支付中,當用戶支付成功后,微信會把相關支付結果和用戶信息發(fā)送給商戶,本文就詳細的介紹了C#?微信支付回調(diào)驗簽處理,具有一定的參考價值,感興趣的可以了解一下
    2021-12-12
  • C#的并發(fā)機制優(yōu)秀在哪你知道么

    C#的并發(fā)機制優(yōu)秀在哪你知道么

    這篇文章主要為大家詳細介紹了C#的并發(fā)機制,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 輕松學習C#的預定義數(shù)據(jù)類型

    輕松學習C#的預定義數(shù)據(jù)類型

    輕松學習C#的預定義數(shù)據(jù)類型,C#的預定義數(shù)據(jù)類型包括兩種,一種是值類型,一種是引用類型,需要的朋友可以參考下
    2015-11-11
  • c# record的使用場景

    c# record的使用場景

    這篇文章主要介紹了c# record的使用場景,幫助大家更好的理解和學習使用c#的新特性,感興趣的朋友可以了解下
    2021-02-02
  • c# 類和成員的修飾詳細介紹

    c# 類和成員的修飾詳細介紹

    本文將詳細介紹c# 類和成員的修飾,需要的朋友可以參考下
    2012-11-11
  • C#實現(xiàn)奇偶排序的示例代碼

    C#實現(xiàn)奇偶排序的示例代碼

    奇偶排序是一種簡單的排序算法,該算法通過比較并交換相鄰的元素來完成排序,本文主要介紹了C#實現(xiàn)奇偶排序的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11

最新評論