結構和類的區別?二者分別在什麼情況下使用?

2021-10-06 23:20:03 字數 1363 閱讀 9899

在學習結構的時候,發現結構和類有很多相似之處,比如:都是使用new關鍵字來例項化、都有成員變數、成員方法和屬性。但是他們肯定是不一樣的兩個東西,所以查閱的大量的資料將這個知識點總結出來,讓更多的讀者都能受益匪淺。

1、都有成員變數、成員方法、建構函式

2、類中的成員結構都可以定義(除析構函式外)

​ 1、宣告時的關鍵字不同,結構是struct,而類是class

​ 2、結構是值型別,儲存在棧中,類是引用型別,儲存在託管堆中,結構在宣告的時候就已經為其分配棧上的記憶體了,而類需要用new為其分配堆上的記憶體。

​ 3、結構是隱式密封的,不能使用sealed (只能在當前專案中訪問,不能繼承只能例項化)abstract (只能在當前專案中訪問,不能例項化只能繼承)修飾符,結構體不能被繼承,所以在呼叫結構方法時不需要查詢vtable 虛函式繼承表,類可以被繼承。

​ 4、結構中的例項字段只能宣告不能賦值,而類沒有限制。結構只宣告沒有用new進行初始化時,可以給它的例項字段直接賦值,而類不行。

​ 5、結構沒有析構函式,結構中的方法不能用virtualabstract修飾符,但是可以用 override 修飾,用來重寫父類的方法。

​ 6、結構不能顯示給出預設建構函式(無參建構函式),無論有沒有自定義構造,預設構造都隱式存在,而類中有自定義的建構函式時,預設構造會被隱藏,想要呼叫預設構造,必須顯示給出缺省構造。

​ 7、結構可以使用屬性,但是屬性和建構函式不能同時存在。

​ 8、結構的自定義建構函式必須初始化所有的例項欄位和沒有初始化的非靜態屬性,類沒有限制。

1、結構是值型別在棧中,棧的訪問速度比堆快,但是容量小,適合輕量級的物件,比如點、矩形、顏色

2、如果需要描述少量字段,不需要繼承,就用結構

3、在變數傳值的時候,希望傳遞物件的是拷貝,而不是物件的引用位址,這個時候就可以使用結構

1、類是引用型別,儲存在託管堆中,託管堆的容量大,適合重量級的物件

2、如果需要描述大量字段,又比較抽象,需要繼承,就用類

什麼是過載or重寫,二者的區別是?

重寫必須滿足如下條件 1 方法的返回值型別必須相同。2 方法的引數個數必須相同。3 方法的引數對應的資料型別必須相同。4 子類方法不得降低父類同名方法的訪問級別。另外被重寫的方法發生在父類與子類之間 方法名。引數列表,返回值型別相同 重寫的訪問修飾符的許可權一定要大於被重寫的訪問修飾符的許可權 重寫...

4 什麼是crop warp及二者區別聯絡

crop英文意思是裁剪,是直接從影象中截出一部分,保留原影象的真實尺寸比。常見的crop有兩種 1 crop和10 crop。假設原大小為256 256,而規定的大小為224 224 1 crop 在256256這張的中心位置crop出乙個224224大小的區域 10 crop 分別在左上角 右上角...

大資料和雲計算二者的區別

關於大資料和雲計算的關係人們通常會有誤解。而且也會把它們混起來說,分別做一句話直白解釋就是 雲計算就是硬體資源的虛擬化 大資料就是海量資料的高效處理。雖然上面的一句話解釋不是非常的貼切,但是可以幫助你簡單的理解二者的區別。另外,如果做乙個更形象的解釋,雲計算相當於我們的計算機和作業系統,將大量的硬體...