Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使属性真正成为只读的?_C#_Reflection_Properties_Readonly - Fatal编程技术网

C# 如何使属性真正成为只读的?

C# 如何使属性真正成为只读的?,c#,reflection,properties,readonly,C#,Reflection,Properties,Readonly,以以下属性为例: public string Foo { get; private set; } 使用反射,我仍然可以从所属类外部设置此属性的值。有没有办法防止这种情况?删除集合存取器不是一个选项,因为它必须是WCF友好的。Jon Skeet: 你不能(AFAIK)停止反射在 呼叫方拥有“完全信任”。如果他们在不完全信任的情况下运行 然后,关于反射的一些事情(如果不是全部的话)会自动地 残疾人,我相信-然而,如果这是为了阻止其他人 调用某些代码时,无法阻止它们使用 完全信任,除非你

以以下属性为例:

public string Foo
{
   get;
   private set;
}
使用反射,我仍然可以从所属类外部设置此属性的值。有没有办法防止这种情况?删除集合存取器不是一个选项,因为它必须是WCF友好的。

Jon Skeet:

你不能(AFAIK)停止反射在 呼叫方拥有“完全信任”。如果他们在不完全信任的情况下运行 然后,关于反射的一些事情(如果不是全部的话)会自动地 残疾人,我相信-然而,如果这是为了阻止其他人 调用某些代码时,无法阻止它们使用 完全信任,除非你首先控制了他们的箱子

乔恩·斯凯特:

你不能(AFAIK)停止反射在 呼叫方拥有“完全信任”。如果他们在不完全信任的情况下运行 然后,关于反射的一些事情(如果不是全部的话)会自动地 残疾人,我相信-然而,如果这是为了阻止其他人 调用某些代码时,无法阻止它们使用 完全信任,除非你首先控制了他们的箱子


真正丑陋的解决方案是使用类来验证只有来自您自己的类的方法调用setter。

真正丑陋的解决方案是使用类来验证只有来自您自己的类的方法调用setter。

您可以混淆代码。这将很难对其进行反思。

您可能会混淆代码。这将使您很难对其进行反思。

您能在setter中抛出一个异常吗?我使用这个策略来防止使用反射来重新实例化一个单例对象(在Java中)?我使用此策略来防止使用反射来重新实例化单例对象(在Java中)。[ReflectionPermission(SecurityAction.Deny,Flags=ReflectionPermissionFlag.AllFlags)]是我所能想到的全部,但它可能没有真正的帮助[ReflectionPermission(SecurityAction.Deny,Flags=ReflectionPermissionFlag.AllFlags)]这几乎是我能想到的,但它可能没有真正的帮助