我有一个看起来像这样的界面
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 中的其他逻辑封装在一起。