你如何让房产真正只读?

时间:2009-11-09 20:01:57

标签: c# reflection properties readonly

采取以下财产:

public string Foo
{
   get;
   private set;
}

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

3 个答案:

答案 0 :(得分:5)

Jon Skeet says

  

你不能(AFAIK)停止在某种情况下使用反射   来电者有“完全信任”。如果他们以低于完全信任的方式运行   然后一些关于反射的事情(如果不是全部的话)是自动的   我相信残疾,但是,如果这是为了阻止其他人   调用某些代码,您无法阻止他们使用运行代码   完全信任,除非你首先控制他们的盒子。

答案 1 :(得分:4)

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

答案 2 :(得分:2)

您可以对代码进行模糊处理。这将使其难以反思。