C 類和物件(八) 部分類

2021-08-10 23:09:28 字數 2355 閱讀 8862

partial關鍵字允許把類、結構、方法或介面放在多個檔案中。一般情況下,某種型別的**生成器生成了乙個類的某部分,所以把類放在多個檔案中是有益的。假定要給類新增一些從工具中自動生成的內容。如果重新執行該工具,前面所做的修改就會丟失。partial關鍵字有助於把類分開放在兩個檔案中,而對不由**生成器定義的檔案進行修改。

partial關鍵字的用法是:把partial放在class、struct或inte***ce關鍵字的前面。在下面的例子中,sampleclass類駐留在兩個不同的原始檔

sampleclassautogenerated.cs和sampleclass.cs中: //sampleclassautogenerated.cs

partial class sampleclass

public void methodone()

//sampleclass.cs

partial class sampleclass

public void methodtwo() {}

編譯包含這兩個原始檔的專案時,會建立乙個sampleclass類,它有兩個方法methodone()和methodtwo()。如果宣告類時使用了下面的關鍵字,則這些關鍵字就必須應用於同乙個類的所有部分:

●public

●private

●protected

●internal

●abstract

●sealed

●new

●一般約束

在巢狀的型別中,只要partial關鍵字位於class關鍵字的前面,就可以巢狀部分類。在把部分類編譯到型別中時,屬性、xml注釋、介面、泛型型別的引數屬性和成員會合併。有如下兩個原始檔:

//sampleclassautogenerated.cs

[customattribute]

partial class sampleclass: samplebaseclass, isampleclass

public void methodone()

//sampleclass.cs

[anotherattribute]

partial class sampleclass: iothersampleclass

public void methodtwo()

編譯後,等價的原始檔變成:

[customattribute]

[anotherattribute]

partial class sampleclass: samplebaseclass, isampleclass, iothersampleclass

public void methodone() {}

public void methodtwo() {}

注意:儘管partial關鍵字很容易建立跨多個檔案的巨大的類,且不同的開發人員處理同乙個類的不同檔案,但該關鍵字並不用於這個目的。在這種情況下,最好把大類拆分成幾個小類,乙個類只用於乙個目的。

部分類可以包含部分方法。如果生成的**應該呼叫可能不存在的方法,這就是非常有用的。擴充套件部分類的程式設計師可以決定建立部分方法的自定義實現**,或者什麼也不做。下面的**片段包含乙個部分類,其方法methodone呼叫apartialmethod方法。apartialmethod方法用partial關鍵字宣告;因此不需要任何實現**。如果沒有實現**,編譯器將刪除這個方法呼叫:

//sampleclassautogenerated.cs

partial class sampleclass

public void methodone()

apartialmethod();

public partial void apartialmethod();

部分方法的實現可以放在部分類的任何其他地方,如下面的**片段所示。有了這個方法,編譯器就在methodone內建立**,呼叫這裡宣告的apartialmethod:

// sampleclass.cs

partial class sampleclass: iothersampleclass

public void apartialmethod()

//實現方法apartialmethod

部分方法必須是void型別,否則編譯器在沒有實現**的情況下無法刪除呼叫。

C 基礎 結構,部分類和Object 類

一 結構 結構和類幾乎一樣,在定義的時候只需要把class 寫成 struct 為結構定義函式和為類定義函式完全 一樣。那什麼時候用結構呢?在一些時候,我們僅需要乙個小的資料結構。如果用類的話效能是有損失的,而採用結構就比較合適。注意,結構是值型別,而類是引用型別 結構不支援繼承 結構在編譯時,編譯...

SilkTest天龍八部系列1 初始化和建構函式

silktest沒有提供專門的建構函式機制,但是在類物件生成的過程中,會先初始化在類中申明的變數。我們可以在初始化該變數的時,呼叫某些函式完成物件初始化工作,看上去好像是呼叫了建構函式一樣。不過要記住的是,這只是用來模擬建構函式而已。下面是乙個例子 我們來分析一下這段 一開始宣告了乙個myclass...

全球首發!慣性導航導論(劍橋大學)第八部分

在前面的章節中,我們描述了加速度計和陀螺儀訊號中產生的一些雜訊過程。在本節中,我們將介紹一種稱為allan variance的技術,它可用於檢測和確定這些過程的屬性。然後,我們將這種技術應用於從xsensmtx裝置發射的加速度計和陀螺儀訊號。mtx是一種mems imu,包含三個正交陀螺儀 加速度計...