C# 是面向對象的程序設計語言,每一個函數都屬於一個類。
當一個方法被聲明為Static時,這個方法是一個靜態方法,編譯器會在編譯時保留這個方 法的實現。也就是說,這個方法屬於類,但是不屬於任何成員,不管這個類的實例是否存在 ,它們都會存在。就像入口函數Static void Main,因為它是靜態函數,所以可以直接被調 用。
當一個方法被聲明為Virtual時,它是一個虛擬方法,直到你使用ClassName variable = new ClassName();聲明一個類的實例之前,它都不存在於真實的內存空間中。這個關鍵字在 類的繼承中非常常用,用來提供類方法的多態性支持。
例如,有一個類Test,Test類擁有兩個方法Hello()和greet():
public class test
類TestMe派生自類Test,那麼當你使用如下的代碼:
{
public void Hello()
{
System.Console.WriteLine("hello, world!");
}
.....
}
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());}
原文地址:http://www.cnblogs.com/mygood/articles/mygood_dome_c.Html
這是一個公有的靜態函數,函數名為Test,無返回值,有一個整形參數a,作用是把a的值 輸出在屏幕上。