作者s4300026 (s4300026)
看板C_Sharp
标题[问题] 继承时的存取限缩
时间Sat Dec 2 16:46:57 2017
大家好,小弟有个疑问
在 C++ 中有个继承限缩的功能
例如:
class D: protected B{}; //把B的所有public变数、方法全部改写成protected
或者是
class D: public B
{
void method() = delete; //删除名称为method方法
};
想询问C#有没有类似的语法呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.250.235.221
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1512204420.A.9E0.html
1F:→ 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
2F:→ yeo1987: 不太确定你的需求是否父类的set/get用protected就好了? 12/03 23:42
3F:→ lightyen: property里面get; private set; ? 12/04 00:22
有想过,但我想把它做成 "元件",因此要提供外部呼叫的指令。
※ 编辑: s4300026 (60.250.235.221), 12/04/2017 07:54:21
4F:推 CloudyWing: 继承权限修饰词只能放宽不能变严格的样子,如果是同组 12/04 09:46
5F:→ CloudyWing: 件使用,用internal? 12/04 09:46
QAQ
6F:推 Litfal: 在C#这种需求通常是在包一层或用interface吧 12/04 13:04
再包一层感觉很丑... 至於interface,我想不到要怎麽用...
7F:→ testPtt: 如果只是要debug就加上[Conditional("DEBUG")]就好 12/04 13:40
不是debug用,是在真的没有硬体的时候模拟用,就像是很多驱动软体都有 "虚拟" 的
像是 虚拟的PCI卡、虚拟的NI卡、虚拟的IO... 等等等
※ 编辑: s4300026 (42.72.195.241), 12/07/2017 20:02:51
8F:→ testPtt: 那就用#define#if去过滤程式码 c++也常这样用 12/08 19:11
9F:→ s4300026: 不懂... 不过算了,我再想想办法 12/09 22:02