C#-靜態與非靜態的區別
阿新 • • 發佈:2019-03-15
key 一個 全部 ont font console 需要 main 拓展
靜態和非靜態的區別
1、在非靜態類中,既可以有實例成員,也可以有靜態成員。如下代碼:
class Person { private static string _name; private char _gender; public void M1() { Console.WriteLine("//我是非靜態方法"); } public static void M2() { Console.WriteLine(" //我是一個靜態方法"); } }
2、在調用實例成員的時候,需要使用對象名.實例成員;在調用靜態成員的時候,需要使用類名.靜態成員名。如下代碼:
static void Main(string[] args) { //調用實例成員 Person P = new Person();//實例化 P.M1();//實例方法 Person.M2();//靜態方法 Console.WriteLine(); Console.ReadKey(); }
總結:
1)靜態成員必須使用類名去調用,而實例成員使用對象名調用。如下代碼:
Person P = new Person();//實例化 P.M1();//實例方法 Person.M2();//靜態方法
2)靜態函數中,只能訪問靜態成員,不允許訪問實例成員。如下代碼:
class Person { private static string _name; private char _gender; public static void M2() { _name= "jingtai"; _gender = ‘f‘;//此行報錯,不能引用非靜態字段 Console.WriteLine(" 我是一個靜態方法"); } }
3)實例函數中,既可以使用靜態成員,也可以使用實例成員。如下代碼:
class Person { private static string _name; private char _gender; public void M1() { _name = "feijingtai"; _gender = ‘m‘; Console.WriteLine("我是非靜態方法"); } }
4)靜態類中只允許有靜態成員,不允許出現實例成員。否則會報錯,如下代碼:
static class Person { private static string _name; //註釋掉的部分代碼會報錯(不能在靜態類中聲明實例成員) //private char _gender; //public void M1() //{ //Console.WriteLine("我是非靜態方法"); //} public static void M2() { Console.WriteLine(" 我是一個靜態方法"); } }
使用:
1)、如果你想要你的類當做一個"工具類"去使用,這個時候可以考慮將類寫成靜態的。(工具類的意思就是,像工具一樣經常需要用到的類,比如:console類,經常需要用來在控制臺輸入輸出)
2)、靜態類在整個項目中,誰都可以調用靜態類,所以靜態類在整個項目中是資源共享。
拓展內容:
內存五大塊中的三大塊:堆, 棧, 靜態存儲區域
只有在程序全部結束之後,靜態類才會釋放資源。通過(GC Garbage Collection垃圾回收器)釋放資源
C#-靜態與非靜態的區別