物件導向 介面

2021-10-04 23:06:09 字數 3961 閱讀 6526

介面:介面是一種用來定義程式的協議,它描述可屬於任何類或結構的一組相關行為,可以把它看成是實現一組類的模板。介面可有方法、屬性、事件和索引器或這4種成員型別的任何組合構成,但不能包含字段。

類和結構可以像類繼承基類一樣從介面繼承,但是可以繼承多個介面。當類和結構繼承介面時,它繼承成員定義但不繼承實現。若要實現介面成員,類和結構中的成員必須是公共的,非靜態的,並且與介面成員具有相同的名稱和簽名。類或結構的屬性和索引器可以作為介面中定義的屬性或索引器定義額外的訪問器。例如,介面可以宣告乙個帶有get訪問其的屬性,而實現該介面的類可以宣告同時帶有set和get訪問器的同一屬性。但是,如果屬性或索引器使用顯示實現,則訪問器必須匹配。

另外,介面可以繼承其他介面,類可以通過其繼承的基類或介面多次繼承某個介面,在這種情況下,如果該介面宣告為新類的一部分,則類只能實現該介面一次。如果沒有將繼承的介面宣告為新類的一部分,其實現將由宣告它的基類提供。基類可以使用虛擬成員實現介面成員。在這種情況下,繼承介面的類可通過重寫虛擬成員來更改介面行為。

定義介面

格式:訪問修飾符(public) 關鍵字(inte***ce) 介面的名字(開始字母是大寫i)

string this[int idx]

}介面的繼承

介面之間也可以實現繼承,和類與類之間的繼承方式完全一樣。

派生介面:基介面

注:介面可以繼承介面,不可以繼承類。乙個類有且只有乙個基類,但是乙個類可以實現多個介面,如果乙個類實現介面和繼承類,先寫基類後寫介面,逗號隔開,繼承類必須放在介面的前面。

類實現介面(當類實現多個介面時,有可能要顯式某個或某些實現介面的方法(名字相同))

如果乙個實現了某個介面,則必須實現介面中定義的所有的內容。

介面作為方法的引數(形參)

凡是實現介面的類的物件都可以作為呼叫方法的實參進行傳遞。

介面作為方法的返回型別

凡是實現介面的類的物件,都可以作為方法返回值。

介面的特徵:

介面類似抽象基類,繼承介面的任何抽象型別都必須實現介面的所有成員。

不能直接例項化介面。

介面可以包含事件、索引器、方法和屬性。

介面不能包含方法的實現。

類和結構可以從多個介面繼承。

介面自身可以從多個介面繼承。

注:1、介面宣告時,通常以大寫字母i開頭。2、介面宣告時,除了inte***ce關鍵字和介面名稱外,其他的都是可選項。3、介面使用new、public、protected、internal和private等修飾符宣告介面,但介面成員必須是公共的。4、繼承介面時,必須在子類和介面之間用冒號(:)另外,如果繼承多個介面,那麼在繼承的每個介面之間用逗號(,)隔開。

例1:類實現介面

public inte***ce ifly

int this[int idx]

}public class bird : ifly

public int this[int idx]

}例2: 介面繼承介面

public inte***ce ibase

public inte***ce ifly:ibase

int this[int idx]

}例3:利用介面選擇不同的語言。

宣告乙個介面,用於定義

seak

方法,而具體

speak

方法功能的實現是在類中進行的

///

inte***ce iselectlanguage

///

///

如果跟中國人對話,則說漢語

///

class c_speakchinese : iselectlanguage

}///

///

如果跟美國人對話,則說英語

///

class c_speakenglish : iselectlanguage

}private void form1_load(object sender, eventargs e)

public bool checkchinese(string str)

else

}return flag;

}private void button1_click(object sender, eventargs e)

else

else

}else//與美國人對話

else}}

}}介面作為方法的引數(形參):

凡是實現介面的類的物件都可以作為呼叫方法的實參進行傳遞。

介面作為方法的返回型別:凡是實現介面的類的物件,都可以作為方法的返回值

c# 介面的顯示實現和隱示實現

介面的實現很多人都知道,但介面的實現方式分顯示實現和隱示實現不知道是不是很多人知道呢!但我覺的公司技術部裡很少提到這個,就想起來寫寫這篇blogs。

目前常用的方式:

public inte***ce ireview

public class shopreview :ireview

}這種方式是隱示實現:

ireview rv = new shopreview();rv.getreviews();

shopreview rv = new shopreview();rv.getreviews();

都可以呼叫getreviews這個方法。

還有一種方式是顯示實現:

public inte***ce ireview

public class shopreview :ireview

}通過這種方式的介面實現。getreviews就只能通過介面來呼叫:

ireview rv = new shopreview();rv.getreviews();

下面的這種方式將會編譯錯誤:

shopreview rv = new shopreview();rv.getreviews();

結論:隱示實現介面和類都可以訪問

顯示實現只有介面可以訪問。

顯示實現益處

1:隱藏**的實現

2:在使用介面訪問的系統中,呼叫者只能通過介面呼叫而不是底層的類來訪問。

ps:可以運用到公司目前的介面+sevice架構的系統中。避免我們總是要求大家一定要通過介面訪問。因為現在不用介面訪問也不行

1.c#類和介面的區別

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

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

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

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

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

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

ps:介面除了規範乙個行為之外,在具體專案中的實際作用也是十分重要的,在物件導向的設計原則以及設計模式的使用中,無不體現作為乙個介面的使用好處,最直接的就是設計原則中ocp(開放封閉原則),我們使用介面,而不需要關心他的具體實現,具體實現的細節變化也無關客戶端(使用介面的類)的使用,對與擴充套件是開放的,我們可以另寫乙個介面的實現來擴充套件當前程式,而不影響上層的使用,但對修改是封閉的,即我們不能夠再去修改介面的定義,當然這個「不能夠」是指在規範原則上不應該這麼做!  

2.抽象類和介面的區別

答:抽象類(abstract class)可以包含功能定義和實現,介面(inte***ce)只能包含功能定義

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

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

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

物件導向 介面

介面 它是乙個特殊的類,但是名稱變成了inte ce 1 在介面中定義的只能是公共的抽象方法 沒有函式體部分 也可以有靜態常量.2 介面採用的外掛程式式配置,可以隨意的匹配給任意乙個類.3 類可以實現 implements 介面,類實現的介面可以有無數個.4 當1個類實現了介面後,該介面的所有的方法...

物件導向之介面

1.什麼是介面?還有另外乙個關鍵字,也可以用來定義新的資料型別 inte ce 但是,使用inte ce關鍵字定義的新資料型別,有一些特殊的要求 1.1 在這種資料型別中,只能有方法宣告,不能有方法實現。1.2 在這種資料型別中,所宣告的成員變數,預設都是public static final的。1...

物件導向的介面

物件導向的介面 dao模式 為解決業務 和資料訪問的緊耦合給修改和維護 帶來的不便,推薦適 應dao模式封裝jdbc dao模式組成部分 dao介面 dao實現類 實體類資料庫連線和封閉工具類 dao模式的優勢 隔離了資料訪問 和業務邏輯 隔離了不同資料庫實現 使用properties類讀取配置檔案...