请问如何去掉父类中多余的属性、方法

zjl1234567 2016-04-29 04:18:20
我在编写一个自定义控件,比如继承自PIcturebox。
在控件中,主要是我内部使用了picturebox的功能,我希望把其他picturebox自带的公开属性和方法隐藏起来,不让用户看到这些。好方便用户使用。
我知道可以private overwite 同名的方法,但是,我几乎想隐藏所有的picturebox自带的公开属性和方法。如果那么写的话会很麻烦。
请高手指教,有好的方法么?
...全文
381 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
mnxm 2016-05-03
  • 打赏
  • 举报
回复
class MyPic { private PictureBox pic = new Pic; } 这样你想让外面看到什么就能看到什么
tinydyw 2016-05-03
  • 打赏
  • 举报
回复
隐藏实现起来肯定是有难度的..你可以考虑在用户修改这些"多余"的属性时提示他们不能修改并取消操作...怎么想都很麻烦... ps:你是想通过反射来显示吗? 那在遍历的时候进行筛选就可以了啊..
mnxm 2016-05-03
  • 打赏
  • 举报
回复
不用继承方式实现,用聚合方式实现
  • 打赏
  • 举报
回复
你这个控件是给开发人员用的吧,如果你不设置你自定义的属性之类的东东,那么在VS里面这些默认都是在自定义一栏里面的,根本不会和默认Control的部分冲突
zjl1234567 2016-05-03
  • 打赏
  • 举报
回复
感谢楼上的回复。看来是我问题描述的不够清楚。我把问题详细说明一下: 我是想写一个WinForm窗体控件,希望暴露给用户的是一些自定义的属性方法,而不显示其他用户用不到的函数。 用户需要做的是更改这些属性方法。该控件与其他组件一起完成相应功能。控件内使用了Picturebox的一部分功能,例如前景色,背景色,背景图片,绘制文字,响应鼠标消息等。我又扩展一部分功能,通过各种逻辑关系操作上述内容。 因为是窗体上的控件,所以应该继承自Control吧。即使是继承自Control也是一样的问题。用户实例化控件后,控件会带着Control上的各种公开属性和方法,和继承自Picturebox并无太大区别。 用户需要在窗体上拖放控件位置和大小,这就涉及到窗体设计器等相关的部分。如果我从头自己写这样的控件,岂不是重复造轮子? 我的意思是无论这个控件继承自Control、UserControl还是Picturebox,都会暴露出用户用不到的公开方法属性。 另外这是个嵌入式系统,所以我希望尽量高效的方式来实现。 楼上诸位的意思是让我什么都不继承,从头写这个控件么?还是有更好方法? 请各位不吝赐教。
crystal_lz 2016-05-03
  • 打赏
  • 举报
回复
简单来说 只要是一个 控件(在windows被称之为窗口) 那么你说的那些属性必然纯在 因为那些是作为一个控件的基本要求 windows系统就是这样 就算你在代码层面上 让他的某个属性“消失” 也并不能改变系统为这个控件分配对应的空间 就算是你从头写也是一个吊样 你真要达到你的目的 那你就别使用控件 直接在窗体上绘制而这样的做法就是 他不再是一个窗口(控件) 而是一个类 那么vs也不会给他窗体设计器的界面 也就是说 你也没有办法通过属性窗口去修改属性什么的 这并不是一个简单的做法 我实在是不明白 有那些多余的属性怎么了 难道说你窗体上多一个按钮和少一个按钮 会让你的程序有很大的效率变化?。。我只能说 这仿佛是在逗我 说不定你程序某些地方代码所产生的空间都比一个control大 如果说windows仅仅是因为 一个control有太多无用(不是无用 只是你没用到)的属性 而导致效率缓慢 连一个系统最基本的ui展示都做不好的话 那这个系统估计没法用了
songbing774933 2016-04-29
  • 打赏
  • 举报
回复
class mycalss { private int num; public int Num { get { return num; } set { num = value; } } private string name; public string Name { get { return name; } set { name = value; } } } class testclass { private mycalss _myclass; public int Num { get { return _myclass.Num; } set { _myclass.Num = value; } } }
  • 打赏
  • 举报
回复
蓝用 -> 滥用 继承是一个设计术语,是有着功能的。继承的目的不是有些人少写几行代码,根本就不是。如果你只想少写几行代码,为什么不组合委派呢?所以先要防止邯郸学步,然后可以学好轻盈的舞蹈。
  • 打赏
  • 举报
回复
你的初衷本来就不是继承,不要蓝用继承这个词儿。
RubenLuLu 2016-04-29
  • 打赏
  • 举报
回复
赞同2楼。 完全没必要去考虑屏蔽。重写一个控件显然更合理
xuzuning 2016-04-29
  • 打赏
  • 举报
回复
不要继承 picturebox 而是在类中实例化一个 picturebox 然后把 picturebox 的部分属性暴漏给用户
圣殿骑士18 2016-04-29
  • 打赏
  • 举报
回复
1、将picturebox设为private 2、定义一些属性,用于公开picturebox的某些属性(通过get访问器)
tinydyw 2016-04-29
  • 打赏
  • 举报
回复
仔细想想 情况A:继承picturebox,但只实现很少一部分picturebox的功能 剩下的全部要屏蔽掉... 情况B:重新写带这些功能的控件,和picturebox没有关系 哪一种比较合理?
在页面上生成多表格(可编辑),像excel可以删除表格行列,兼容ie表格编辑的问题,但是在其他浏览器上会有点不美观,如果想要美观点可以将插件的 1

110,530

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧