C# 除了一次类之外,如何隐藏所有类的数据?

C# 除了一次类之外,如何隐藏所有类的数据?,c#,interface,information-hiding,C#,Interface,Information Hiding,我正试图修复我最近在我们的一些软件中遇到的一个设计缺陷,而不重新编写整个程序。有一个.exe,它有一个消息侦听器线程,该线程从某个服务器接收数据,然后将其写入一个单独的DLL中的类(我们称之为StaticDataClass),该DLL存储它接收的所有数据(大部分是启动时从数据库提取的静态数据)。这个类还提供了其他类可以用来检索数据的方法。问题是存储(集合)方法都是公共的,因此任何其他类都可以覆盖此数据并破坏整个应用程序。对于我来说,什么是保护数据(使set/store方法对除可执行文件本身包含的

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

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

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


有更干净的方法吗?

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

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

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

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

这听起来它有潜力,我会试试看。谢谢。看起来很有效……这比我希望的任何解决方案都简单!这听起来很有潜力,我会试试的。谢谢。看起来很有效……这比我希望的任何解决方案都简单!