天天看點

C#中的部分類和部分方法

1、部分類:

部分類即把類的定義放在多個檔案中,如将字段、屬性和構造函數放在一個檔案中,而把方法放在另一個檔案中。

為此,隻需在包含部分類定義的每個檔案中對類使用partial關鍵字即可。如下:

public partial class MyClass

{

……

}

應用于部分類的接口也會應用于整個類,如下:

public partial class MyClass : IMyInterface1

{

……

}

public partial class MyClass : IMyInterface2

{

……

}

等價于:

public partial class MyClass : IMyInterface1 , IMyInterface2

{

……

}

部分類可以在一個部分類定義檔案或者多個部分類定義檔案中包含基類,但如果基類在多個定義檔案中指定,它就必須是同一個基類,因為在C#中是單繼承機制。

2、部分方法:

部分方法的限制:

部分類中可以定義部分方法(部分方法必須在部分類中定義)。

部分方法在一個部分類中定義(沒有方法體),在另一個部分類中實作。在這兩個部分類中,部分方法都要 使用partial關鍵字。

部分方法可以是靜态的,但他們總是私有的,且傳回類型隻能是void。參數不能是out參數,但可以是ref參數。

部分方法不能使用virtual,abstract,override,new,sealed和extern修飾符。

部分方法的優勢:

部分方法的優勢展現在編譯代碼時,而不是使用代碼時。

在定制自動生成的代碼或設計器建立的代碼時,部分方法是很有用的。

設計器會聲明部分方法,使用者根據具體需要選擇是否實作它。如果不實作它就不會影響性能,因為在編譯過的代碼中并不存在該方法。

PS:

實際上,編譯代碼時,如果代碼包含一個沒有實作代碼(partial void DoSomeThing();)的部分方法,編譯器會完全删除該方法,還會删除對該方法的所有調用。

執行代碼時不會檢查實作代碼,因為沒有要檢查的方法調用。這會略微提高性能。

為什麼部分方法的傳回類型必須為void?

答:因為隻用傳回類型為void,方法才能沒有方法體,否則至少要有一個傳回值,這樣就一定有實作代碼,使部分方法的優勢蕩然無存。(個人見解)

繼續閱讀