程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#的靜態域和非靜態域

C#的靜態域和非靜態域

編輯:關於C語言

靜態域的聲明是使用static修飾符,其它的域都是非靜態域。靜態域和非靜態域分別屬於C#中靜態變量和非靜態變量。

若將一個域說明為靜態的,無論建立多少個該類的實例,內存中只存在一個靜態數據的拷貝。當這個類的第一個實例建立時,域被初始化。以後再進行類的實例化時,不再對其進行初始化,所有屬於這個類的實例共享一個副本。

與之相反,非靜態域在類的每次實例化時,每個實例都擁有一份單獨的拷貝。

下面的例子清楚地反映了二者之間的區別。

程序清單12-1:

using System;
public class Count
{
  static int count;
  int number;
  public Count(){
      count=count+1;
      number=count;
  }
  public void show(){
  Console.WriteLine("object{0}:count={1}",number,count);
 }
}
class Test
{
  public static void Main(){
         Count a=new Count();
         a.show();
         Console.WriteLine();
      Count b=new Count();
         a.show();
         b.show();
         Console.WriteLine();
      Count c=new Count();
         a.show();
         b.show();
         c.show();
}

上面的例子中,類Count中域count被聲明為靜態,為所有類的實例所共享。類每進行一次實例化,它的值就加1,這個操作就在構造函數中實現,因而可以用於對系統中類的實例數進行計數。

域number用來存放當前實例的編號。當實被實例化時,在構造函數中就對編號進行賦值,從而可以看出實例化的順序。

方法show用來在屏幕上打印出當前類的實例數,還有類的各個實例的編號。

程序的運行結果應為:

object1:count=1
——————————
object1:count=2
object2:count=2
——————————
object1:count=3
object2.count=3
object3.count=3

從上面的例子中可以看出,無論何時,類的所有實例的count值都是相同的,說明它們共享一個數據,count域只有一個副本。而每個實例的標號都是不同的,一旦實例化,標號就不再變化了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved