控制对基类的子控件的访问?

时间:2010-11-10 08:17:07

标签: c# winforms inheritance user-controls

让我先说明这个问题,说明我通常不会宽恕将继承原则应用于用户界面设计的做法;也就是说,使用许多子控件开发特定于应用程序的FormUserControl,并在子类中扩展它,这些子类会添加控件或更改基类上的控件的布局。它有时看起来像一个优雅的设计解决方案,但它很少这样做...

考虑到这一点,我有一个关于在上述场景中控制对子控件的访问的问题;是否有一种安全的方法来阻止子类访问/修改基类上的子控件?

我知道实现此目的的主要方法是在声明子控件的成员变量时使用(默认)private访问修饰符;但是,这并不会阻止子类访问其基类的控件,如下所示:

base.Controls["someControl"].Text = "Look, I vandalised your control";

模糊控件的名称几乎没有实现,并且尝试使用Controls隐藏new属性也无法解决问题(因为子类可以将其基类型转换回{{1并以这种方式访问​​该属性)。请注意,当从类的范围外部访问控件时,此问题也适用 - 您只需要对控件/表单的引用,然后您就可以将子控件修改为您的内容。

那么,您建议采用哪种技术来保护(某些)儿童控制以这种方式被操纵?

1 个答案:

答案 0 :(得分:1)

private以外的任何内容都会超出顶部。 Controls属性旁边总是有反射。

访问修饰符private与安全性无关,它是一种组织工具。认为它是一个膝盖高的栅栏。

因此,您最好的解决方案是与您的程序员交谈。