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

C#中的virtual、override

編輯:關於C#

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());}

原文地址:http://www.cnblogs.com/mygood/articles/mygood_dome_c.html

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

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