C 一些相似型別的區別

2021-07-02 07:58:30 字數 2362 閱讀 5842

1.c#類和介面的區別

介面是負責功能的定義,專案中通過介面來規範類,操作類以及抽象類的概念!

而類是負責功能的具體實現!

在類中也有抽象類的定義,抽象類與介面的區別在於:

抽象類是乙個不完全的類,類裡面有抽象的方法,屬性,也可以有具體的方法和屬性,需要進一步的專業化。

但介面是乙個行為的規範,裡面的所有東西都是抽象的!

乙個類只可以繼承乙個基類也就是父類,但可以實現多個介面

ps:介面除了規範乙個行為之外,在具體專案中的實際作用也是十分重要的,在物件導向的設計原則以及設計模式的使用中,無不體現作為乙個介面的使用好處,最直接的就是設計原則中

ocp(開放封閉原則),我們使用介面,而不需要關心他的具體實現,具體實現的細節變化也無關客戶端(使用介面的類)的使用,對與擴充套件是開放的,我們可以另寫乙個介面的實現來擴充套件當前程式,而不影響上層的使用,但對修改是封閉的,即我們不能夠再去修改介面的定義,當然這個「不能夠」是指在規範原則上不應該這麼做!  

2.抽象類和介面的區別 答:

抽象類(abstract class

)可以包含功能定義和實現,介面(

inte***ce

)只能包含功能定義

抽象類是從一系列相關物件中抽象出來的概念, 因此反映的是事物的內部共性;介面是為了滿足外部呼叫而定義的乙個功能約定, 因此反映的是事物的外部特性

分析物件,提煉內部共性形成抽象類,用以表示物件本質,即「是什麼」

為外部提供呼叫或功能需要擴充時優先使用介面

3.c#語言中,值型別和引用型別有何不同?

解答值型別和引用型別的區別在於,值型別的變數直接存放實際的資料,而引用型別的變數存放的則是資料的位址,即物件的引用。

值型別變數直接把變數的值儲存在堆疊中,引用型別的變數把實際資料的位址儲存在堆疊中,而實際資料則儲存在堆中。注意,堆和堆疊是兩個不同的概念,在記憶體中的儲存位置也不相同,堆一般用於儲存可變長度的資料,如字串型別;

而堆疊則用於儲存固定長度的資料,如整型型別的資料

int(

每個int

變數占用四個位元組

)。由資料儲存的位置可以得知,當把乙個值變數賦給另乙個值變數時,會在堆疊中儲存兩個完全相同的值

;而把乙個引用變數賦給另乙個引用變數,則會在堆疊中儲存對同乙個堆位置的兩個引用,即在堆疊中儲存的是同乙個堆的位址。在進行資料操作時,對於值型別,由於每個變數都有自己的值,因此對乙個變數的操作不會影響到其它變數

;對於引用型別的變數,對乙個變數的資料進行操作就是對這個變數在堆中的資料進行操作,如果兩個引用型別的變數引用同乙個物件,實際含義就是它們在堆疊中儲存的堆的位址相同,因此對乙個變數的操作就會影響到引用同乙個物件的另乙個變數。

4.結構和類的區別

解答1) 結構是乙個值型別,儲存在棧上,而類是乙個引用型別,儲存在受管制的堆上。

2) 對結構中的資料進行操作比對類或物件中的資料進行操作速度要快。

3) 一般用結構儲存多種型別的資料,當建立乙個很多類或物件共用的小型物件時,使用結構效率更高。

5.抽象方法和虛方法的區別

抽象方法

使用abstract

關鍵字 

public abstract bool withdraw(…);

抽象方法是必須被派生類覆寫的方法。

抽象方法是可以看成是沒有實現體的虛方法

如果類中包含抽象方法,那麼類就必須定義為抽象類,不論是否還包含其它一般方法

虛方法使用virtual

關鍵字 

public virtual bool withdraw(…);

呼叫虛方法,執行時將確定呼叫物件是什麼類的例項,並呼叫適當的覆寫的方法。

虛方法可以有實現體

6.虛擬方法和抽象方法有什麼區別?

抽象方法只有宣告沒有實現,需要在子類中實現;虛擬方法有宣告和實現,並且可以在子類中覆蓋,也可以不覆蓋使用父類的預設實現

虛擬方法有實現**,抽象方法則沒有,並且抽象類不能被例項化,只能例項化實現了全部抽象方法的派生類,抽象方法是虛擬方法的一種

抽象方法沒有實現,它的存在只是為派生類統一介面;派生類應該實現這個方法

如果編寫乙個基類,它永遠不會被實現,那麼就應該將這個類中的乙個或多個方法定義為抽象方法。

抽象方法只有宣告沒有實現,需要在子類中實現;虛擬方法有宣告和實現,並且可以在子類中覆蓋,也可以不覆蓋使用父類的預設實現

補充一點

只允許在抽象類中使用抽象方法宣告

其實大家首先要搞清楚,虛方法與多型性關係密切,虛方法允許派生類完全或部分重寫該類的方法,需寫方法體。抽象類中可以包含抽象方法與一般的方法,抽象類不可以new,

抽象方法只是乙個定義,沒有方法體,也就是沒有

{},也不要在裡面寫內容。它們兩個相像的一點是都用

override

重寫

C 與C 的一些區別

最近在學習c 總結了一些c 與c 的區別 1.c 不支援多重繼承。2.c 檔案是.h,cpp,而c 檔案是.cs。3.c 宣告類時,括號後沒有 4.與c c 不同,c 在類的外部不能宣告全域性變數,也沒有全域性函式。6.c 中的var相當於c 中的auto。7.c 中不管巢狀級別如何,都不能在第乙個...

iOS 一些相似屬性的理解

viewb是viewa的子類,view b在view a上的起始座標是 40,40 view b的高 height 為380,寬 width 為240。所以,view b的frame值是 40,40,240,380 bounds的值是 0,0,240,380 center的值是 160,230 所以...

C語言和C 的一些區別

c 在語法上比c語言有了一些改進 struct student int main 使用結構體時必須要加上struct stu.name bob stu.age 18 return 0 student stu 使用結構體時直接當成資料型別即可c語言無法使用引用,c 加入了引用 即 變數 式的指標 機制...