1. 程式人生 > >c#欄位

c#欄位

C#中欄位可分為例項欄位靜態欄位

1、例項欄位

類的每個例項擁有自己的各個類成員的副本,這些成員稱為例項成員。改變一個例項欄位的值不會影響任何其它例項中成員的值。

如下例所示,程式碼聲明瞭一個類D,它帶有唯一整型欄位Mem1。Main建立了該類的兩個例項,每個例項都有自己的欄位Mem1的副本,改變一個例項欄位副本的值不影響其他例項的副本的值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test6
{
    class Program
    {
        
static void Main(string[] args) { D d1 = new D(); D d2 = new D(); d1.Mem1 = 10; d2.Mem1 = 28; Console.WriteLine("d1 = {0}, d2 = {1}", d1.Mem1, d2.Mem1); Console.ReadLine(); } } class D { public
int Mem1; } }

這段程式碼的輸出為:

2、靜態欄位

除了例項欄位,類還可以擁有靜態欄位。

靜態欄位被類的所有例項共享,所有例項都訪問同一記憶體位置。因此,如果該記憶體位置的值被一個例項改變了,這種改變對所有的例項都可見。可以使用static修飾符將欄位宣告為靜態。

就像例項成員,靜態成員可以使用點運算子從類的外部訪問,但因為沒有例項,所以必須使用類名才能訪問,如下程式碼所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test6 { class Program { static void Main(string[] args) { D d1 = new D(); D d2 = new D(); d1.SetVars(2, 4); d1.Display("d1"); d2.SetVars(15, 17); d2.Display("d2"); d1.Display("d1"); Console.WriteLine("Mem2 = " + D.Mem2.ToString()); Console.ReadLine(); } } class D { public int Mem1; static public int Mem2; public void SetVars(int v1, int v2) { Mem1 = v1; Mem2 = v2; } public void Display(string str) { Console.WriteLine("{0}: Mem1 = {1}, Mem2 = {2}", str, Mem1, Mem2); } } }

這段程式碼的輸出為:

對於例項成員,只有在例項建立之後才能產生例項成員,在例項銷燬之後例項成員也就不存在了。但是即使類沒有例項,也存在靜態成員,並且可以訪問