c# 靜態成員和靜態建構函式和繼承之間的關聯!
阿新 • • 發佈:2021-02-06
說在前面:靜態成員屬於類本身,或者叫類成員。
靜態建構函式在呼叫其類成員時先呼叫或者在建立對應例項時先呼叫,且無論如何都只調用一次。
當有繼承關係時,在呼叫當前物件例項建構函式建立物件時會先呼叫其父類的例項建構函式。
class Program { static void Main(string[] args) { B b = new B(); Console.Read(); } } public class A { public static string strText; public string Text; static A() { Console.WriteLine("呼叫了A的靜態建構函式"); } public A() { Console.WriteLine("呼叫了A的建構函式"); } } public class B : A { static B() { Console.WriteLine("呼叫了B的靜態建構函式"); } public B() { Console.WriteLine("呼叫了B的建構函式"); } }
===================================================================================分割線================================================================================
class Program { static void Main(string[] args) { B b = new B(); A A = new A(); Console.Read(); } } public class A { public static string strText; public string Text; static A() { Console.WriteLine("呼叫了A的靜態建構函式"); } public A() { Console.WriteLine("呼叫了A的建構函式"); } } public class B : A { static B() { Console.WriteLine("呼叫了B的靜態建構函式"); } public B() { Console.WriteLine("呼叫了B的建構函式"); } }
A的靜態建構函式只執行一次
===================================================================================分割線================================================================================
class Program { static void Main(string[] args) { Console.WriteLine(B.strText); Console.Read(); } } public class A { public static string strText; public string Text; static A() { strText = "A"; Console.WriteLine("呼叫了A的靜態建構函式"); } public A() { Console.WriteLine("呼叫了A的建構函式"); } } public class B : A { static B() { strText = "B"; Console.WriteLine("呼叫了B的靜態建構函式"); } public B() { Console.WriteLine("呼叫了B的建構函式"); } }
B呼叫A的靜態變數時會自動呼叫A的靜態建構函式