让我先说明这个问题,说明我通常不会宽恕将继承原则应用于用户界面设计的做法;也就是说,使用许多子控件开发特定于应用程序的Form
或UserControl
,并在子类中扩展它,这些子类会添加控件或更改基类上的控件的布局。它有时看起来像一个优雅的设计解决方案,但它很少这样做...
考虑到这一点,我有一个关于在上述场景中控制对子控件的访问的问题;是否有一种安全的方法来阻止子类访问/修改基类上的子控件?
我知道实现此目的的主要方法是在声明子控件的成员变量时使用(默认)private
访问修饰符;但是,这并不会阻止子类访问其基类的控件,如下所示:
base.Controls["someControl"].Text = "Look, I vandalised your control";
模糊控件的名称几乎没有实现,并且尝试使用Controls
隐藏new
属性也无法解决问题(因为子类可以将其基类型转换回{{1并以这种方式访问该属性)。请注意,当从类的范围外部访问控件时,此问题也适用 - 您只需要对控件/表单的引用,然后您就可以将子控件修改为您的内容。
那么,您建议采用哪种技术来保护(某些)儿童控制以这种方式被操纵?
答案 0 :(得分:1)
private
以外的任何内容都会超出顶部。 Controls
属性旁边总是有反射。
访问修饰符private
与安全性无关,它是一种组织工具。认为它是一个膝盖高的栅栏。
因此,您最好的解决方案是与您的程序员交谈。