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

C#3.0的分部方法(2)

編輯:關於C語言

如果沒有寫實現聲明,則不會發射方法調用代碼,也不會對參數進行求值。因此,對於下面的例子:

class CA
{
partial void M(int i);
static void Main()
{
CA a = new CA();
int i = 0;
a.M(i++);
}
}

分部方法M只有定義聲明,沒有實現聲明,因此也不會發射調用該方法的代碼:a.M(i++),因此也不會對i++進行求值。所以最終i的值依然是0.但如果為M編寫了實現聲明,則a.M(i++)的代碼會被編譯到最終的程序集中,同時參數也被求值,i的值將被變為1。

分部方法只能出現在分部類中。

分部方法必須是私有(private)的,並且返回值類型必須是void。

分部方法可以帶有參數,並且其參數可以帶有this、params和ref修飾符,但不能帶有out修飾符。

分部方法不可以是虛擬(virtual)的。

分部方法不可以是外部(extern)的。

分部方法可以是靜態(static)的,也可以是不安全(unsafe)的。

分部方法可以是泛型方法,泛型約束必須放置在定義聲明中,但也可以在事先聲明中重復說明。在定義聲明和實現聲明中,類型參數和類型參數的名字不一定必須一致。

不能將分部方法封裝到一個委托中。

分部方法的應用場景

分部方法和分部類型的初衷是類似的,一方面可以使得不同的開發者能夠同時編寫一個類型的不同部分,另一方面可以分離自動生成的代碼和用戶手寫的代碼。和分部類型一樣,分部方法也會在編譯初期被合並成一個方法定義。猜測:從微軟的角度來看,第二個“初衷”可能才是真正的初衷。

由此,分部方法有如下幾個應用場景:(場景1 出自In Case You Haven't Heard這篇文章「http://blogs.msdn.com/wesdyer/archive/2007/05/23/in-case-you- haven-t-heard.ASPx),場景2出自Visual Studio 2008的Linq to SQL技術,而場景3則是Anders Liu自已臆想出來的。

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