是否可以将auto属性与显式接口实现一起使用?

时间:2018-08-10 04:13:08

标签: c# interface encapsulation explicit-interface

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

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中的其他逻辑封装在一起。

0 个答案:

没有答案