如何使属性真正只读?

发布于 2024-08-10 02:06:48 字数 163 浏览 8 评论 0原文

采用以下属性:

public string Foo
{
   get;
   private set;
}

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

Take the following property:

public string Foo
{
   get;
   private set;
}

Using reflection, I can still set the value of this property from outside the owning class. Is there a way to prevent this? Removing the set accessor is not an option as it must be WCF friendly.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

初见你 2024-08-17 02:06:48

乔恩·斯基特

你不能(据我所知)停止在以下情况下使用反射:
呼叫者具有“充分信任”。如果他们在不完全信任的情况下运行
那么一些关于反射的事情(如果不是全部)会自动发生
残疾人,我相信 - 但是,如果这是为了阻止其他人
调用某些代码,您无法阻止他们运行您的代码
完全信任,除非你一开始就能控制他们的盒子。

Jon Skeet says:

You can't (AFAIK) stop reflection being used in a situation where the
caller has "full trust". If they're running with less than full trust
then some things about reflection (if not all) are automatically
disabled, I believe - however, if this is to stop other people from
calling some code, you can't prevent them from running your code with
full trust unless you're in control of their box in the first place.

巷雨优美回忆 2024-08-17 02:06:48

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

A really ugly solution would be to use the StackTrace class to verify that only methods from your own class calls the setter.

若言繁花未落 2024-08-17 02:06:48

您可以混淆代码。这样一来,就很难反思了。

You could obfuscate the code. This would make it hard to reflect on it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文