c# 靜態成員和實例成員的區別


靜態成員也稱為共享成員,例如靜態屬性 靜態字段 靜態方法;靜態成員可以在類的實例之間共享。

靜態類中只能有靜態成員,不能有實例成員,因為靜態類不能進行實例化;

在非靜態類中 即可以有靜態成員 也可以有非靜態成員;

只要是靜態成員 屬性 字段 方法,都需要用類名去調用;

靜態成員和實例成員的區別:

靜態成員需要通過static修飾,非靜態成員不需要通過static修飾;

靜態成員屬於類,可以直接通過“類名.靜態成員”的方式訪問;

非靜態成員,必須實例化對象后,通過對象.實例成員來訪問;  

當類第一次加載的時候(第一次被加載到內存的時候),該類下的所有的靜態成員都會被加載,實例成員有多少個對象,就會創建多少個對象;靜態成員會被加載到靜態存儲區,直到程序退出時才會被釋放;

由上面顯然可知,定義靜態的成員是可以影響程序的執行效率的。那么什么時候定義靜態的成員變量呢?

①變量需要被共享的時候②方法需要被反復的調用的時候

 

 

靜態成員和實例成員的區別:
靜態成員是需要通過static關鍵字來修飾的,而實例成員不用static關鍵字修飾。他們區別如下代碼:






01 class Program
02     {
03         static void Main(string[] args)
04         {
05             //靜態成員屬於類,可以直接通過“類名.靜態成員”的方式訪問
06             Person.Run();
07             //實例成員屬於對象,需要通過“對象名.實例成員”來訪問
08             Person p = new Person();
09             p.Sing();
10         }
11     }
12     class Person
13     {
14         //靜態成員變量
15         private static int nAge;
16         //實例成員變量
17         private string strName;
18         public static void Run()
19         {
20             Console.WriteLine("我會奔跑!");
21         }
22         public void Sing()
23         {
24             Console.WriteLine("我會唱歌");
25         }
26     }

當類第一次被加載的時候(就是該類第一次被加載到內存當中),該類下面的所有靜態的成員都會被加載。實例成員有多少對象,就會創建多少對象。
而靜態成員只被加載到靜態存儲區,只被創建一次,且直到程序退出時才會被釋放。
看下面的代碼:
01 class Program
02     {
03         static void Main(string[] args)
04         {
05             Person p = new Person();
06             Person p1 = new Person();
07             Person p2 = new Person();
08         }
09     }
10                                         
11     class Person
12     {
13         //靜態成員變量
14         private static int nAge;
15         //實例成員變量
16         private string strName;
17         public static void Run()
18         {
19             Console.WriteLine("我會奔跑!");
20         }
21         public void Sing()
22         {
23             Console.WriteLine("我會唱歌");
24         }
25     }
那么在內存中發生了什么呢?如下圖:


由上面顯然可知,定義靜態的成員是可以影響程序的執行效率的。那么什么時候定義靜態的成員變量呢?
①變量需要被共享的時候②方法需要被反復的調用的時候

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM