1. 程式人生 > >c#中static的作用及程式碼分析

c#中static的作用及程式碼分析

說明2:

C# 是面向物件的程式設計語言,每一個函式都屬於一個類。

當一個方法被宣告為Static時,這個方法是一個靜態方法,編譯器會在編譯時保留這個方法的實現。也就是說,這個方法屬於類,但是不屬於任何成員,不管這個類的例項是否存在,它們都會存在。就像入口函式Static void Main,因為它是靜態函式,所以可以直接被呼叫。

當一個方法被宣告為Virtual時,它是一個虛擬方法,直到你使用ClassName variable = new ClassName();宣告一個類的例項之前,它都不存在於真實的記憶體空間中。這個關鍵字在類的繼承中非常常用,用來提供類方法的多型性支援。

例如,有一個類Test,Test類擁有兩個方法Hello()和greet():
public class test
{
public void Hello()
{
System.Console.WriteLine("hello, world!");
}
.....
}
類TestMe派生自類Test,那麼當你使用如下的程式碼:
Test a = new TestMe();
建立一個TestMe類的新例項後,假如你試圖執行如下的程式碼:
a.Hello();
那麼,自然就會執行基類Test的Hello()方法,但是如果你想給予派生類TestMe一個它自己的Hello()方法,你就要在Test類中將Hello()方法宣告為虛擬的:
public virtual void Hello()
{
...
}
然後在派生類中以override關鍵字表示覆蓋基類的方法:
public class TestMe : Test
{
...

public overrice void Hello()
{
System.Console.WriteLine("hello from TestMe class!!!");
}

....
}
這時呼叫a.Hello(),就會出現“hello from TestMe class!!!”字樣,而不是“Hello,world!”說明基類的方法已經被覆蓋了。這就是多型性的表現。

從上面不難看出,一個靜態的方法是真實存在的,而一個虛擬方法可以被派生類重寫,這二者是衝突的,其實對於一個方法,C#規定只能使用下面這些限定符中的一個:
override virtual static abstract sealed
代表的含義分別為:
過載函式、虛擬函式、靜態函式、抽象函式、密封函式(不可派生)

另外,C#中定義一個方法的宣告為:

可見性 型別 返回值 方法名(引數列表){方法體}

例如
public static void Test(int a){System.Console.WriteLine(a.ToString());}

這是一個公有的靜態函式,函式名為Test,無返回值,有一個整形引數a,作用是把a的值輸出在螢幕上。