看板 C_Sharp 關於我們 聯絡資訊
大家好,小弟有個疑問 在 C++ 中有個繼承限縮的功能 例如: class D: protected B{}; //把B的所有public變數、方法全部改寫成protected 或者是 class D: public B { void method() = delete; //刪除名稱為method方法 }; 想詢問C#有沒有類似的語法呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.235.221 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1512204420.A.9E0.html
testPtt: 我覺得只能繼承1個應該是沒有必要做這個功能 12/02 19:16
我正在寫一個與硬體溝通的class 但為了方便除錯,我就寫了一個虛擬硬體的class 只要是硬體輸入的部分 舉例來說: 檢查特定IO是 ON/OFF 我就先用 set 把想(ㄐㄧㄚˇ)要(ㄕㄜˋ)的狀態丟進去 然後用 get 讀出來 然後做對應的事情 接著我要寫真的與硬體溝通的class時 我直接繼承原本寫的虛擬class 然後想要把 set 改成 protected 這樣外面的人就看不到了,不會誤用 而我硬體檢查IO後,又可以使用以前寫的 set 做數值儲存 這是我的想法 因此我才在問有沒有類似的功能 ※ 編輯: s4300026 (220.134.201.145), 12/03/2017 21:35:36
yeo1987: 不太確定你的需求是否父類的set/get用protected就好了? 12/03 23:42
lightyen: property裡面get; private set; ? 12/04 00:22
有想過,但我想把它做成 "元件",因此要提供外部呼叫的指令。 ※ 編輯: s4300026 (60.250.235.221), 12/04/2017 07:54:21
CloudyWing: 繼承權限修飾詞只能放寬不能變嚴格的樣子,如果是同組 12/04 09:46
CloudyWing: 件使用,用internal? 12/04 09:46
QAQ
Litfal: 在C#這種需求通常是在包一層或用interface吧 12/04 13:04
再包一層感覺很醜... 至於interface,我想不到要怎麼用...
testPtt: 如果只是要debug就加上[Conditional("DEBUG")]就好 12/04 13:40
不是debug用,是在真的沒有硬體的時候模擬用,就像是很多驅動軟體都有 "虛擬" 的 像是 虛擬的PCI卡、虛擬的NI卡、虛擬的IO... 等等等 ※ 編輯: s4300026 (42.72.195.241), 12/07/2017 20:02:51
testPtt: 那就用#define#if去過濾程式碼 c++也常這樣用 12/08 19:11
s4300026: 不懂... 不過算了,我再想想辦法 12/09 22:02