97色伦色在线综合视频,无玛专区,18videosex性欧美黑色,日韩黄色电影免费在线观看,国产精品伦理一区二区三区,在线视频欧美日韩,亚洲欧美在线中文字幕不卡

淄博市住房和城鄉(xiāng)建設(shè)廳網(wǎng)站公司網(wǎng)站域名主機(jī)

鶴壁市浩天電氣有限公司 2026/01/24 10:48:56
淄博市住房和城鄉(xiāng)建設(shè)廳網(wǎng)站,公司網(wǎng)站域名主機(jī),市場(chǎng)調(diào)研分析報(bào)告怎么寫,手機(jī)免費(fèi)制作app平臺(tái)一、為什么學(xué) C 回調(diào)會(huì)覺得“抽象”#xff1f; 很多 Android / Java 開發(fā)者在第一次接觸 C 回調(diào)時(shí)#xff0c;都會(huì)被下面這種代碼勸退#xff1a; typedef struct {void (*open)(void* self);void (*close)(void* self); } Ops; 看起來(lái)既不像函數(shù)#xff0c;也不像類很多 Android / Java 開發(fā)者在第一次接觸 C 回調(diào)時(shí)都會(huì)被下面這種代碼勸退typedef struct { void (*open)(void* self); void (*close)(void* self); } Ops;看起來(lái)既不像函數(shù)也不像類更不像接口。但當(dāng)我真正理解它之后才發(fā)現(xiàn)這套寫法本質(zhì)上和 Android 的接口回調(diào)是完全一致的只是語(yǔ)法層面更底層。二、從 Android 的 setOnClickListener 說(shuō)起在 Android 中我們非常熟悉這種寫法button.setOnClickListener(listener);這里發(fā)生了三件事listener是一個(gè)對(duì)象實(shí)例它實(shí)現(xiàn)了OnClickListener接口系統(tǒng)在合適的時(shí)機(jī)回調(diào)listener.onClick(view);關(guān)鍵點(diǎn)在于系統(tǒng)并不關(guān)心 listener 的具體類型只關(guān)心你有沒有實(shí)現(xiàn)規(guī)定的方法三、C 語(yǔ)言里沒有接口那怎么辦C 語(yǔ)言沒有classinterfacethis但系統(tǒng)級(jí)代碼同樣需要回調(diào)解耦多態(tài)于是 C 選擇了一種“手工實(shí)現(xiàn)接口”的方式struct 函數(shù)指針?biāo)?、OpsC 里的“接口定義”typedef struct { void (*open)(void* self); void (*close)(void* self); } Ops;這段代碼不是在實(shí)現(xiàn)邏輯而是在做一件事定義一組能力約定接口可以直接在腦子里翻譯成 Javainterface Ops { void open(); void close(); }區(qū)別只有一個(gè)Java 有隱式thisC 需要顯式傳self五、void* self 是什么void* self的本質(zhì)是C 版的 this / Context / 上下文對(duì)象因?yàn)?C 沒有對(duì)象模型所以誰(shuí)在調(diào)用狀態(tài)在哪里都必須由調(diào)用方手動(dòng)傳入。void file_open(void* self) { File* f (File*)self; printf(%d , f-fd); }這和 Java 里的void open() { System.out.println(this.fd); }在“角色”上是完全等價(jià)的。六、接口是怎么“綁定實(shí)現(xiàn)”的很多人會(huì)問file_open為什么會(huì)成為open的實(shí)現(xiàn)答案不在函數(shù)名而在賦值Ops file_ops { .open file_open, .close file_close };這一刻發(fā)生了綁定file_ops.open指向file_openfile_ops.close指向file_close之后的調(diào)用file_ops.open(f);等價(jià)于file_open(f);七、file_ops 是什么角色可以非常準(zhǔn)確地說(shuō)file_ops是一個(gè)“接口實(shí)例 / 方法表 / 回調(diào)對(duì)象”它就像 Android 里的OnClickListener listener new MyClickListener();只不過在 C 里方法表Ops對(duì)象實(shí)例self被拆開保存。八、一句話總結(jié)構(gòu)成完整模型**C 的接口回調(diào) struct接口定義函數(shù)指針方法void* selfthis / Context**這并不是“奇怪的 C 寫法”而是在沒有語(yǔ)言級(jí)支持的情況下手工實(shí)現(xiàn)的面向?qū)ο笈c接口機(jī)制。九、寫在最后當(dāng)我把 C 的這套回調(diào)模型和 Android 的接口機(jī)制對(duì)齊之后才真正意識(shí)到語(yǔ)言不同但工程思想是完全相通的。
版權(quán)聲明: 本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)聯(lián)系我們進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!