1. 程式人生 > 其它 >C# static關鍵字詳解

C# static關鍵字詳解

技術標籤:精通C#c#

static關鍵字

紙上得來終覺淺,絕知此事要躬行!

1、using靜態指令

using static 指令適用於任何具有靜態成員(或巢狀型別)的型別,即使該型別還具有例項成員。 但是,只能通過型別例項來呼叫例項成員。using static 指令是在 C# 6 中引入的。
用我理解的來說,就是你使用這個指令引用名稱空間,就可以直接使用成員,而不需要類.成員來操作。

using System;
using static System.Math;

namespace ConsoleApp1
{
    class Program
    {
        static
void Main(string[] args) { double num1 = Math.PI * 3; double num2 = PI * 3; Console.WriteLine($"num1={num1},num2={num2},num1==num2:{num1 == num2}"); /*num1=9.42477796076938, num2 =9.42477796076938, num1==num2:True*/
} } }

2、靜態欄位

首先,靜態欄位屬於類級別,所以可以直接類.欄位名來獲取資料 (public型別);然後就是靜態欄位關注同一個記憶體位置,所以修改靜態變數的值,相當於同步修改了呼叫了這個靜態欄位的值。

  class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Account.Number); //1
            Account a = new Account(2);
            Console.
WriteLine(Account.Number); //3 Account a1 = new Account(3); Console.WriteLine(Account.Number); //6 Account a2 = new Account(4); Console.WriteLine(Account.Number); //10 } } public class Account { public static int Number = 1; public Account(int num) { Number += num; } }

3、靜態建構函式

  • 一個類可以定義一個靜態建構函式。換句話說,靜態建構函式不能過載
  • 靜態建構函式允許訪問修飾符並且不能接受任何引數
  • 無論建立了多少型別的變數,靜態建構函式只執行一次
  • 執行庫(dll)建立類例項或呼叫者首次訪問靜態成員之前,執行庫會呼叫靜態建構函式(如下例)
  • 靜態建構函式的執行先於任何例項級別的建構函式
 class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Account.Number);
            Account a = new Account();
        }
    }

    public class Account
    {
        public static int Number = 1;

        static Account()
        {
            Number += 1;
            Console.WriteLine(Number);
        }

        public Account()
        {
            Number = 3;
            Console.WriteLine(Number);
        }
    }

結果如下:
在這裡插入圖片描述

4、靜態類

如果一個類被定義成靜態的,就不能使用new關鍵字來建立物件,並且只能包含用static關鍵字標記的欄位或成員。如果不是這樣,就會受到編譯錯誤。靜態類可以用來設計工具類(只包含靜態功能的類或結構)。ps:常量是隱式靜態

 class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Account.Number); //3
        }
    }

    static class Account
    {
        public const double PI = 3.14;
        public static int Number = 1;

        static Account()
        {
            Console.WriteLine(Number); //1
            Number += 2;
            Console.WriteLine(Number); //3
        }
    }

努力!!!奮鬥!!!
躺平!!!自由!!!