位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 部分方法定義

提問人:劉團圓發(fā)布時間:2020-12-07

    部分類也可以定義部分方法(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)它,就不會影響性能,因為在編譯過的代碼中并不存在該方法。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部