【问题标题】:How do you hide data from all but once class?您如何隐藏除一次课程之外的所有数据?
【发布时间】:2010-12-09 06:11:37
【问题描述】:

我正在尝试修复我最近在我们的某些软件中遇到的设计缺陷,而无需重新编写整个内容。有一个 .exe 有一个消息侦听器线程,该线程从某个服务器接收数据,然后将其写入一个单独的 DLL 中的类(我们称之为 StaticDataClass),该类存储它接收到的所有数据(主要是静态的)在启动时从数据库中提取)。此类还提供其他类可用于检索数据的方法。问题是存储(设置)方法都是公共的,因此任何其他类都可以覆盖这些数据并破坏整个应用程序。除了可执行文件本身包含的对象之外,我有什么好方法可以保护所有对象的数据(使 set/store 方法不可见)?

现在我正在玩弄一个只定义公共 getter 的接口,然后让一个单例类实现该接口,然后 Instance 属性将返回接口类型,因此他们将只能使用声明的 get 方法在界面中。但是当可执行文件启动时,它会以某种方式获得对 StaticDataClass 对象而不是接口类型的实际引用,因此它也将能够调用 store/set 方法。

这并不是完全的证明,但它可以防止一些不熟悉系统的开发人员认为可以使用这些公共存储方法,因为 Visual Studio 智能型使它们在编码时可见。相反,他们将不得不尝试通过将对象转换为包含存储方法的类型来打破它。

有没有更简洁的方法来做到这一点?

【问题讨论】:

    标签: c# interface information-hiding


    【解决方案1】:

    您可以将 set 方法设置为内部方法,并使用 InternalsVisibleToAttribute 授予对首选可执行文件的访问权限。

    【讨论】:

    • 这听起来很有潜力,我会试试的。谢谢。
    • 看起来可行...这比我希望的任何解决方案都简单!
    【解决方案2】:

    我同意 - 让可信程序集可以看到内部结构听起来是实现您想要做的最简单的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2011-04-22
      • 2017-12-26
      • 2021-11-03
      • 2012-10-25
      • 2018-05-23
      • 1970-01-01
      相关资源
      最近更新 更多