專用通道>

您當前所在位置: 首頁 > 行業新聞 > IT技術討論 >

IT技術討論

.NET中的靜態與非靜態總結

發布者:亚游成都錦江點擊: 分享到
靜態類 vs 普通類 靜態類與普通類的區別有以下幾點: 1)靜態類無法實例化而普通類可以; 2)靜態類隻能從System.Object基類繼承;普通可以繼承其它任何非static和非sealed類,但也隻能繼

靜態類 vs 普通類

靜態類與普通類的區別有以下幾點:

1)靜態類無法實例化而普通類可以;

2)靜態類隻能從System.Object基類繼承;普通可以繼承其它任何非static和非sealed類,但也隻能繼承一個類;

3)靜態類不能繼承接口;普通類可以繼承多個接口;

4)靜態類隻能包含靜態成員;普通類可以包含靜態和非靜態成員;

5)靜態類不能作為字段,方法參數和局部變量使用;普通類可以;

靜態類的意義:

可以用靜態類封裝一組不與任何對象相關聯的方法,如Math類,Console類。

 

靜態構造函數 vs 實例構造函數

靜態構造函數與實例構造函數的區別有以下幾點:

1)靜態構造函數屬於類,在第一次用到該類時執行且隻執行一次;實例構造函數屬於對象,在每次初始化一個新對象的時候都會執行;

2)靜態構造函數隻能定義一次,且不能包含參數;實例構造函數可以定義重載,且可以包含參數;

3)靜態構造函數隻能訪問類型的靜態字段;實例構造函數可以訪問類型的靜態和非靜態字段;

4)靜態構造函數不能包含訪問修飾符,默認為private.

靜態構造函數的意義:

設置類型的初始化,例如初始化類型需要的實例對象,為類型的靜態字段賦值等。

 

靜態方法 vs 實例方法

靜態方法與實例方法的區別有以下幾點:

1)靜態方法屬於類,通過類來調用;實例方法屬於對象,通過對象來調用;

2)靜態方法不能訪問類的非靜態成員;

靜態方法的意義:

完成一個與特定對象無關的功能。

 

靜態字段 vs 非靜態字段

靜態字段與非靜態字段的區別:

靜態字段屬於類,通過類來調用;非靜態字段屬於對象,通過對象來調用。

靜態字段的意義:

可以用靜態字段來記錄一些屬於類本身的信息。

代碼演示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class Test
     {
         public int i = 10;
         public static int j = 20;
         public int k;
  
         public Test()
         {
             Console.WriteLine("i is a non-static field, its value is {0}", i);
             Console.WriteLine("j is a static field, its value is {0}", j);
         }
  
         public Test(int k)
         {
             this.k = k;
             Console.WriteLine("i is a non-static field, its value is {0}", i);
             Console.WriteLine("j is a static field, its value is {0}", j);
             Console.WriteLine("k is a non-static field, its value is {0}", k);
         }
  
         static Test()
         {
             Console.WriteLine("I am a static constructor, I couldn't contain any parameters!");
             Console.WriteLine("I couldn't access to the non-static field i, I can only access to the static field j, the value of j is {0}", j);
         }
  
         public void Print()
         {
             Console.WriteLine("I am a instance method, I can access both the non-static field and the static field!");
             Console.WriteLine("The value of i is {0} and the value of j is {1}", i, j);
         }
  
         public static void StaticPrint()
         {
             Console.WriteLine("I am a static method, I couldnt access to the non-static field i,  I can only access to the static field j, the value of j is {0}", j);
         }
     }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Program
     {
         static void Main(string[] args)
         {
             Test t1 = new Test();
             Test t2 = new Test(30);
              
             Console.WriteLine(Test.j);
             Console.WriteLine(t1.i);
             Console.WriteLine(t2.k);
  
             Test.StaticPrint();
             t1.Print();
             Console.Read();
         }
     }

運行結果:

從運行結果可以看出,在Main方法中創建了兩個Test對象,靜態構造函數隻執行了一次,且先於實例構造函數執行,實例構造函數在兩次實例化過程中各執行了一次。同時可以看到亚游是通過Test.j來調用的j字段,而i字段和k字段的調用則通過Test的兩個對象t1和t2調用。同樣的,靜態方法StaticPrint也是用Test類來調用,而實例方法Print通過Test類的對象來調用。



亚游谘詢老師

成都優越教育谘詢有限公司(亚游成都錦江校區介紹)

成都優越教育谘詢有限公司(亚游成都錦江校區)是亚游總部在成都設立的一家示範校區。涵蓋ACCP、Java、.Net、網絡營銷、市場營銷,遊戲開發等多專業校區,承擔教學、就業示範、以及教師培養輸送等職責。
亚游作為北京大學下屬的專業計算機學校,以北京大學強大師資作為依托,連續13年被評為“中國IT教育第一品牌”,累計培養60+萬優秀軟件工程師,是名符其實的軟件工程師的搖籃……請認準品牌名校——亚游成都錦江校區,地址:成都市春熙路北口東行500米(大慈寺22號)。