C# static關鍵字詳解
阿新 • • 發佈:2020-12-31
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
}
}
努力!!!奮鬥!!!
躺平!!!自由!!!