我有一个看起来像这样的界面
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;
}
然后我看不到如何设置它的值,除非我也这样做:
private bool isFrozen;
)我的目标是将IFreezableEntity逻辑中的属性与Foo中的其他逻辑封装在一起。