C# 部分方法定義
部分類也可以定義部分方法(partial method)。部分方法在一個部分類中定義(沒有方法體),在另一個部分類中實現(xiàn)。在這兩個部分類中,都要使用partial關(guān)鍵字。
public partial class MyClass
{
partial void HyPartialMethod();
}
public partial class MyClass
{
pairbial void MyPartialMethod ()
{
// Method in^lementation
}
}
部分方法也可以是靜態(tài)的,但它們總是私有的,且不能有返回值。它們使用的任何參數(shù)都不能是out參數(shù),但可以是ref參數(shù)。部分方法也不能使用virtual、abstract、override、new、sealed或extern修飾符。
有了這些限制,就不太容易看出部分方法的作用了。實際上,部分方法的重要性體現(xiàn)在編譯代碼時,而不是使用代碼時??紤]下面的代碼:
public partial class MyClass
{
partial void DoSomething&lse();
public void DoSomething()
{
WriteLine("DoSomething() execution started.");
DoSomethingBlse();
WriteLine("DoSomething(} execution finished.");
}
}
public partial class MyClass
{
partial void DoSomethingElse()=>
WriteLine("DoSomethingElse() called.");
}
在第一個部分類定義中定義和調(diào)用部分方法DoSomethingElse(),在第二個部分類中實現(xiàn)它。在控制臺應(yīng)用程序中調(diào)用DoSomething()方法時,輸出如下內(nèi)容:
DoSomething() execution started.
DoSomethingElse() called.
DoSomething() execution finished.
如果刪除第二個部分類定義,或者刪除部分方法的全部實現(xiàn)代碼(或者注釋掉這部分代碼),輸出就如下所示:
DoSomething() execution started.
DoSomething() execution finished.
讀者可能認為,調(diào)用DoSomethingElse()時,運行庫發(fā)現(xiàn)該方法沒有實現(xiàn)代碼,因此會繼續(xù)執(zhí)行下一行代碼。 但實際上,編譯代碼時,如果代碼包含一個沒有實現(xiàn)代碼的部分方法,編譯器會完全刪除該方法,還會刪除對該方法的所有調(diào)用。執(zhí)行代碼時,不會檢查實現(xiàn)代碼,因為沒有要檢査的方法調(diào)用。這會略微提高性能。
與部分類一樣,在定制自動生成的代碼或設(shè)計器創(chuàng)建的代碼時,部分方法是很有用的。設(shè)計器會聲明部分方法,用戶根據(jù)具體情形選擇是否實現(xiàn)它。如果不實現(xiàn)它,就不會影響性能,因為在編譯過的代碼中并不存在該方法。
點擊加載更多評論>>