我理解公共和私人之间在可访问性和一般编程实践方面的区别。我更具体地询问DLL中的安全性。
DLL看起来像这样......
public static class OrphanAnnieDecoderRing
{
private const string _secretCode = "Drink More Ovaltine";
private int OvaltineDrinkCount = 0;
public void DrinkOvaltine() => OvaltineDrinkCount += 1;
public string RevealSecret
{
get
{
if (OvaltineDrinkCount >= 500)
{
return _secretCode;
}
else
{
return "Unable to reveal secret!";
}
}
}
}
我的_secretCode和OvaltineDrinkCount属性是否可以被访问DLL的任何人的可见性或操作保护(除了符合某些条件的条件限制之外)?我知道DLL文件可以解决一些安全问题,我不确定私有属性或私有常量是否需要注意这些问题。
答案 0 :(得分:2)
没有
Access-Modifiers用于限制成员对您的类的调用者的访问。 这对于强制封装非常有用,封装是面向对象编程OOP(隐藏实现细节等)引入的主要目标之一。
当您将代码编译为DLL时,它会在程序集中转换为中间语言(IL)(在技术上与经典非托管(Win32动态链接库)几乎没有关系,它在运行时被编译为机器代码目标机器(通过即时编译器,JIT)。
然而,IL可以使用像ILSpy这样的工具轻松地进行“逆向工程”,所以每个有权访问你的程序集的人都可以“读取”这个秘密。(更进一步,甚至可以使用反射从类外部修改私有只读字段,但这本身就是一个主题。)