Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >不允许设置属性的属性

不允许设置属性的属性
EN

Stack Overflow用户
提问于 2011-06-13 22:40:21
回答 5查看 206关注 0票数 5

我不确定这叫什么,也不知道我在哪里看到了这个,所以我真的不知道要搜索什么。因此,我试图解释我的意思。

假设我有以下类结构,其中在TypeA中使用TypeB

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class TypeA
{
    public TypeB B
    { get; set }
}

class TypeB
{
    public int X
    { get; set }
}

现在,当我有一个TypeA实例时,我想要禁止,我可以直接修改TypeB的值,而不需要重新分配。所以基本上我想防止这种情况的发生:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TypeA a = new TypeA();

// this should not be possible:
a.B.X = 1234;

// but this should work:
TypeB b = a.B;
b.X = 1234;
a.B = b;

原因是我以一种特殊的方式持久化对象,所以为了正确跟踪TypeB中的更改,我想要求重新分配TypeA中的B的值。

我想我以前在一些内置对象中看到过类似的事情,这抛出了一个错误和编译时间。这叫什么,如何在我的自定义类型中实现它?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-13 22:55:57

可以从TypeA中的属性getter返回TypeB对象的副本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class TypeA
{
    private TypeB _b;
    public TypeB B
    {
        get { return (TypeB)_b.Clone(); }
        set { _b = value; }
    }
}

这将阻止直接修改_b的属性。然而,它实际上不会禁止执行a.B.X = 1234;,但指令将不起作用(它只会修改立即被丢弃的副本)。

除非TypeB是一个结构,否则没有办法阻止这样的指令:

  • 它不能在编译时被检测到,因为编译器不知道它会修改一个副本(同样,除非它是一个结构)
  • 它在运行时也不能被检测到,因为你不能区分:

TypeB b= a.B;b.X = 1234;

a.B.X = 1234;

在这两种情况下,属性的调用方式都是相同的,并且无法知道调用代码对结果做了什么……

票数 3
EN

Stack Overflow用户

发布于 2011-06-13 22:50:49

在WPF/Silverlight中,有两个“密封”和“冻结”对象的概念。基本上,一旦封存/冻结,对象就不能更改。您可以在这里应用相同的逻辑:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class SealableObject {

    public bool IsSealed { get; private set; }

    public void Seal() {
        if (this.IsSealed)
            throw new InvalidOperationException("The object is already sealed");
        this.IsSealed = true;
    }

    protected void VerifyNotSealed() {
        if (this.IsSealed)
            throw new InvalidOperationException("Object is sealed");
    }
}

然后,您需要在派生类TypeB中检查IsSealed,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class TypeB : SealableObject
{
    private int x;
    public int X
    {
        get { return this.x; }
        set {
            this.VerifyNotSealed();
            this.x = value;
        }
}

然后,当TypeB被分配给您的TypeA属性时,您需要密封它。

票数 3
EN

Stack Overflow用户

发布于 2011-06-13 22:55:49

TypeB实现一个仅使用getter定义X的接口。在TypeA上公开具有此接口类型的属性。现在,您只能在进行向下转换时修改属性的属性,这是您最多只能达到的目标。

此方法将为您提供编译时安全性。如果你只需要运行时安全,看看CodeNaked的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6337247

复制
相关文章
如何修复WordPress内容更新和发布失败错误
如果您的WordPress网站在您尝试进行更改时返回诸如“更新失败”或“发布失败”之类的错误消息,那么结果不仅令人沮丧,而且还会阻止访问者访问他们需要的内容。
青梅煮码
2023/01/14
5.5K0
如何修复WordPress内容更新和发布失败错误
WordPress 版本更新
WordPress 是一个内容管理系统 (WCM),即它是一种以最佳方式组织创建、存储和展示 Web 内容的整个过程的工具。WordPress 作为一种改进工具开始了它的旅程,以增强日常写作的常规排版。但它被视为一种博客工具,当我们进入今年最后一个季度时,WordPress 成为最常用的 WCM 系统,而且不仅在博客社区中也是如此。
海拥
2023/01/01
2.7K0
WordPress 版本更新
如何修复WordPress更新失败/发布失败错误,您可能已掉线
WordPress CMS是一个完全开源的工具,对用户免费,但是,由于插件等原因,有时会出现一些奇怪的错误消息,这些WordPress错误可能会影响网站的效果,也可能会给网站带来意想不到的后果。
晓得博客
2021/04/07
8K0
错误——持续更新
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/48551789
用户1451823
2018/09/13
1.8K0
错误——持续更新
WordPress更新文章 显示最近更新时间
子比主题为了防止更新后失效 请在目录内新建func.php 文件 插入上方代码即可
残浔
2023/05/11
6740
wordpress 5.8更新,支持webp
  wordpress 5.8刚刚发布更新,支持webp格式的图片上传,如下图所示。WebP 是一种现代图像格式,可为网络上的图像提供改进的无损和有损压缩。WebP 图像比它们的 JPEG 或 PNG 等效图像平均小 30% 左右,从而使网站速度更快,使用的带宽更少。
ytkah
2021/07/23
2.2K0
WordPress 发布 4.0.1 安全更新,强烈建议更新
WordPress 4.0.1 发布,这是一个非常关键的安全修复版本,强烈建议每位用户都升级到最新版本!
Denis
2023/04/15
4330
ubuntu更新源出现错误
有的小伙伴出现了残留源错误,有的人说重装,有的人说改sourcelist,这些方法诚然好使,但都是高射炮打蚊子:小题大作。 现在来说解决方法: 先选右下九个点
全栈程序员站长
2022/08/27
1.3K0
ubuntu更新源出现错误
如何禁用WordPress升级更新通知
WordPress 提供的更新通知对于了解新的可用更新和跟踪站点上的自动更新很有用。但是也有像子凡我这样希望禁用它们以减少 WordPress 仪表板或电子邮件收件箱中的混乱情况。或者,这可能是因为你使用不同的方式来管理更新,从而使通知变得多余。当然子凡我只是因为当 WordPress 核心有升级时,普通的作者编辑人员后台也有提示,这就造成了不需要的通知,所以最直接的方式就是除了管理员其它用户没必要看到 WordPress 的升级更新通知。
张子凡
2023/01/09
1.8K0
如何禁用WordPress升级更新通知
WordPress 技巧:禁止插件更新提醒
这个技巧会阻止 WordPress 检查插件是否有有更新,这个技巧对于给客户建的网站非常有帮助,因为很可能你已经修改了插件,插件的更新将会让整个网站不能正常运行。
Denis
2023/04/15
4750
实用WordPress插件收集(更新中)
wordpress里面的页面的显示顺序是无法控制的。你无法控制某个页面排在前面或者排在后面。 而有时候,我们又确实需要控制某些页面的显示顺序,那么就可以用My Page Order这个wordpress插件了。
星哥玩云
2022/06/11
4720
WordPress 网站怎么关闭自动更新和更新提示
WordPress 网站怎么关闭自动更新和更新提示?之前不是因为 WordPressP 自动更新导致主题无法正常使用,首页出现“空白模板:索引”。原文:《WordPress 自动更新后出现“空白模板:索引”的解决方法》但是我操作之后发现首页依然是“空白模板”,第一反应会不会是系统又自动更新了。故有此教程。
主机教程网2bcd.com
2022/10/17
1.2K0
禁用WordPress致命错误(WSOD)处理
WordPress 5.2内置了一个新功能,当检测到插件或主题发生错误时,自动发送邮件通知网站管理员,即使在后端完全无法访问的情况下(例如发生所谓的“白屏死机”),管理员仍然有机会登录并对此问题采取措施。
可定
2020/04/20
6020
[已解决]如何修复另一个更新正在进行中WordPress升级错误
在使用WordPress建站时,是否遇到过 WordPress 网站当前正在进行另一个更新的错误?此错误会阻止您更新 WordPress 版本,没有正在进行的核心、主题或插件的更新,重新启动更新过程也会导致出现相同的通知,显然是有某种 WordPress 更新锁阻止更新初始化。在本文中,我们晓得博客将向您展示如何修复另一个更新正在进行中WordPress升级错误。
晓得博客
2021/08/12
3.7K0
WordPress 手动升级更新方法
魏艾斯博客有个 wordpress 站很久没有更新版本了,每次 WordPress 升级都会对已发行问题进行安全修复,所以还是尽量的升级到最新版本。前几天上去看了一下最新版本 4.73,点击现在更新后,页面提示:请重试。然后就在这里反复循环了。试过了很多办法比如删除数据库中的版本更新锁定命令行也无效,干脆就手动更新吧。 WordPress 的主题和插件众多,如果你用的主题是比较简单的那还好说,我们不考虑这方面的情况而盲目设置自动升级,很容易导致升级之后出现错误,严重的会导致网站页面变空白、不兼容等问题。所以
魏艾斯博客www.vpsss.net
2018/06/01
4.7K0
点击加载更多

相似问题

自定义javascript确认框

11

angularjs自定义确认框

72

自定义警报/确认框

21

使用TypeScript自定义确认框

10

自定义确认对话框

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文