[問題] 繼承時的存取限縮

看板C_Sharp作者 (s4300026)時間6年前 (2017/12/02 16:47), 6年前編輯推噓2(207)
留言9則, 6人參與, 6年前最新討論串1/1
大家好,小弟有個疑問 在 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

12/02 19:16, 6年前 , 1F
我覺得只能繼承1個應該是沒有必要做這個功能
12/02 19:16, 1F
我正在寫一個與硬體溝通的class 但為了方便除錯,我就寫了一個虛擬硬體的class 只要是硬體輸入的部分 舉例來說: 檢查特定IO是 ON/OFF 我就先用 set 把想(ㄐㄧㄚˇ)要(ㄕㄜˋ)的狀態丟進去 然後用 get 讀出來 然後做對應的事情 接著我要寫真的與硬體溝通的class時 我直接繼承原本寫的虛擬class 然後想要把 set 改成 protected 這樣外面的人就看不到了,不會誤用 而我硬體檢查IO後,又可以使用以前寫的 set 做數值儲存 這是我的想法 因此我才在問有沒有類似的功能 ※ 編輯: s4300026 (220.134.201.145), 12/03/2017 21:35:36

12/03 23:42, 6年前 , 2F
不太確定你的需求是否父類的set/get用protected就好了?
12/03 23:42, 2F

12/04 00:22, 6年前 , 3F
property裡面get; private set; ?
12/04 00:22, 3F
有想過,但我想把它做成 "元件",因此要提供外部呼叫的指令。 ※ 編輯: s4300026 (60.250.235.221), 12/04/2017 07:54:21

12/04 09:46, 6年前 , 4F
繼承權限修飾詞只能放寬不能變嚴格的樣子,如果是同組
12/04 09:46, 4F

12/04 09:46, 6年前 , 5F
件使用,用internal?
12/04 09:46, 5F
QAQ

12/04 13:04, 6年前 , 6F
在C#這種需求通常是在包一層或用interface吧
12/04 13:04, 6F
再包一層感覺很醜... 至於interface,我想不到要怎麼用...

12/04 13:40, 6年前 , 7F
如果只是要debug就加上[Conditional("DEBUG")]就好
12/04 13:40, 7F
不是debug用,是在真的沒有硬體的時候模擬用,就像是很多驅動軟體都有 "虛擬" 的 像是 虛擬的PCI卡、虛擬的NI卡、虛擬的IO... 等等等 ※ 編輯: s4300026 (42.72.195.241), 12/07/2017 20:02:51

12/08 19:11, 6年前 , 8F
那就用#define#if去過濾程式碼 c++也常這樣用
12/08 19:11, 8F

12/09 22:02, 6年前 , 9F
不懂... 不過算了,我再想想辦法
12/09 22:02, 9F
文章代碼(AID): #1Q8cY4dW (C_Sharp)