【问题标题】:How do you make a property truly read only?如何使属性真正只读?
【发布时间】:2010-12-14 18:33:51
【问题描述】:

取以下属性:

public string Foo
{
   get;
   private set;
}

使用反射,我仍然可以从所属类之外设置此属性的值。有没有办法防止这种情况?删除 set 访问器不是一个选项,因为它必须是 WCF 友好的。

【问题讨论】:

  • 你能在你的setter中抛出一个异常吗?我已经使用这种策略来防止使用反射来重新实例化一个单例对象(在 Java 中)。

标签: c# reflection properties readonly


【解决方案1】:

您可以混淆代码。这会让人难以反思。

【讨论】:

    【解决方案2】:

    一个非常丑陋的解决方案是使用StackTrace 类来验证只有您自己的类中的方法才能调用setter。

    【讨论】:

      【解决方案3】:

      乔恩·斯基特says:

      您不能(AFAIK)停止在以下情况下使用反射: 来电者有“完全信任”。如果他们在不完全信任的情况下运行 那么关于反射的一些事情(如果不是全部的话)是自动的 禁用,我相信 - 但是,如果这是为了阻止其他人 调用一些代码,你不能阻止它们运行你的代码 with 完全信任,除非你一开始就控制了他们的盒子。

      【讨论】:

      • [ReflectionPermission(SecurityAction.Deny, Flags = ReflectionPermissionFlag.AllFlags)] 大概是我能想到的,但它可能并没有真正的帮助
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      相关资源
      最近更新 更多