0

我有一个看起来像这样的界面

public interface IFreezableEntity
{
    bool IsFrozen { get; }
    void Freeze();
}

还有一个看起来像这样的类:

public class Foo : IFreezableEntity
{
    private bool isFrozen;

    bool IFreezableEntity.IsFrozen => this.isFrozen;

    void IFreezableEntity.Freeze()
    {
        // Do useful work
        this.isFrozen = true;
    }

    public void CanNotDoWhileFrozen()
    {
        if (this.isFrozen)
        {
            throw new MethodAccessException($"{nameof(this.CanNotDoWhileFrozen)} should not be called on a Frozen instance");
        }
        // Do some work
    }

    public void CanOnlyDoWhileFrozen()
    {
        if (!this.isFrozen)
        {
            throw new MethodAccessException($"{nameof(this.CanOnlyDoWhileFrozen)} should not be called unless instance is Frozen");
        }
        // Do some work
    }
}

我想使用接口的显式实现,因为这些不是我的类的消费者通常应该调用的方法。这可行,但理想情况下,我想删除支持 isFrozen 字段。

我可以将阅读参考更改为if (this.isFrozen)足够if (((IFreezableEntity)this).IsFrozen)简单。

我的问题是,如果我将其定义为自动属性

    bool IFreezableEntity.IsFrozen
    {
        get;
    }

那么我看不到如何设置它的值,除非我:

  • 向 IFreezableEntity 添加一个设置器(我不想要)
  • 将其转换为具有私有集的常规公共财产(我不妨离开private bool isFrozen;

我的目标是将其 IFreezableEntity 逻辑的属性与 Foo 中的其他逻辑封装在一起。

4

0 回答 0