idea 呼叫c 介面 C 中對於介面的實現方式

2021-10-13 06:27:40 字數 2945 閱讀 2996

c#中對於介面的實現方式有隱式介面和顯式介面兩種:

隱式地實現介面成員

建立乙個介面,ichinese,包含乙個成員 speak;我們建立乙個類speaker,實現介面chinese

//隱藏式實現例子

public inte***ce ichinese

string speak();

public class speaker : ichinese

public string speak()

return "中文";

這個就是隱式實現介面。

隱式實現呼叫方法如下:

ichinese s = new speaker();

s.speak();

speaker s = new speaker();

s.speak();

都可以呼叫speak這個方法。

建立乙個介面,ienglish,包含乙個成員 speak;讓我們的類speaker來實現介面ienglish

//顯式實現例子

public inte***ce ienglish

string speak();

public class speaker : ienglish

string english.speak()

return "english";

通過這種顯示介面實現。speak方法就只能通過介面來呼叫:

ienglish s = new speaker();

s.speak();

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

speaker s = new speaker();

s.speak();

隱式實現和顯示實現的區別:

一、語法的區別

1、隱式方式speaker的成員(speak)實現有而且必須有自己的訪問修飾符(public),顯示實現方式speaker的成員(speak)不能有任何的訪問修飾符。

2、顯示實現方式speaker使用介面名稱和乙個句點命名該類成員(speak)來實現的:english.speak();也就是

二、呼叫的區別

隱式介面實現的呼叫,注意類的宣告,可以用介面宣告,也可以用實現類 speaker宣告。呼叫者都可以得到呼叫例項化物件的行為speak;

class program

static void main(string args)

ichinese s = new speaker();

s.speak();

speaker s = new speaker();

s.speak();

顯式介面實現呼叫,注意類的宣告,只可以用介面宣告,呼叫者才可以可以得到呼叫例項化物件的行為speak;

class program

static void main(string args)

ienglish s = new speaker();

s.speak();

//下面寫法將引起編譯錯誤錯誤「petshop.speaker」不包含「speak」的定義;

// speaker s = new speaker();

// s.speak();

結論:隱示實現物件宣告為介面和類都可以訪問到其行為,顯示實現只有宣告為介面可以訪問。

如果兩個介面中有相同的方法名,那麼同時實現這兩個介面的類,就會出現不確定的情形,在編寫方法時,也不知道實現哪個介面的方法了。為解決這一問題,c#提供了顯示介面實現技術,就是在方法名前加介面名稱,用介面名稱來限定成員。用「介面名.方法名()」來區分實現的是哪乙個介面。

注意:顯示介面實現時,在方法名前不能加任何訪問修飾符。這種方式和普通方法不同,普通方法前不加訪問修飾符,預設為私有的,而顯式介面實現時方法前不加任何修飾符,預設為公有的,如果前面加上修飾符,會出現編譯錯誤。

呼叫顯示介面實現的正確方式是通過介面引用,通過介面引用來確定要呼叫的版本。

下面我們看一下完整例項:

using system;

public inte***ce iperson

string name

get;

set;

void show(string name);

public inte***ce istudent

string studentid

get;

set;

void show(string studentid);

public class student: iperson, istudent

private string _name;

public string name

getreturn _name;

set_name = value;

private string _studentid;

public string studentid

getreturn _studentid;

set_studentid = value;

void iperson.show(string name)

console.writeline("姓名為", name);

void istudent.show(string studentid)

console.writeline("學號為", studentid);

class program

static void main()

student s = new student();

console.writeline("輸入姓名");

s.name = console.readline();

console.writeline("輸入學號");

s.studentid = console.readline();

iperson per = s;

per.show(s.name);

istudent stu = s;

stu.show(s.studentid);

idea 呼叫c 介面 C 介面的三種實現方式

public inte ce myinte ce 下面三個方法的簽名都是 method public hidebysig newslot abstract virtual public virutal abstract void method1 void method2 void method3 c...

C 呼叫C 介面

1 system.dllnotfoundexception 型別的未經處理的異常在 test.exe 中發生 其他資訊 無法載入 dll dll ar algorithm.dll 找不到指定的模組。異常來自 hresult 0x8007007e 該問題的原因是程式無法找到ar algorithm.d...

C 呼叫matlab介面

實驗平台 matlab r2016b vs2013 思路 1.設定matlab的編譯器,使用外部的vc或者gcc等編譯器。2.編譯m檔案成dll 3.設定vs的include路徑和lib鏈結庫的路徑 4.編寫c 呼叫dll 1.設定matlab的編譯器 在命令列視窗下,輸入並執行如下命令 mex s...