【问题标题】:Controlling access to child controls on base class?控制对基类上子控件的访问?
【发布时间】:2010-11-10 08:17:07
【问题描述】:

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

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

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

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

混淆控件名称收效甚微,尝试使用new 隐藏Controls 属性也不能解决问题(因为子类可以将其基类型转换回Control 并访问该属性那样)。请注意,当从类范围之外访问控件时,此问题也适用 - 您只需要对控件/表单的引用,然后您就可以根据自己的需要修改子控件。

那么,您会推荐哪些技术来保护(某些)子控件不被以这种方式操纵?

【问题讨论】:

    标签: c# winforms inheritance user-controls


    【解决方案1】:

    private 之外的任何内容都会显得过于夸张。在Controls 属性旁边也总是有反射。

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-28
      • 1970-01-01
      • 2017-05-31
      • 2014-12-12
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      相关资源
      最近更新 更多