我有一个带有属性的接口(interface):
public interface IEntityModifier
{
...
bool AutoDetachOnFinished { get; set; }
bool Finished { get; }
...
}
然后我实现它:
bool IEntityModifier.AutoDetachOnFinished { get; set; }
bool IEntityModifier.Finished { get { return this.mFinished; } }
但是当我需要在同一个类中访问 AutoDetachOnFinished
时,会弹出一个编译器错误:
void IEntityModifier.Update(IEntity pEntity, Microsoft.Xna.Framework.GameTime pGameTime)
{
if (!this.mFinished)
{
this.Value += this.Delta * (float)pGameTime.ElapsedGameTime.TotalSeconds;
if (this.Value >= this.Max)
{
this.Value = this.Max;
this.mFinished = true;
if (this.AutoDetachOnFinished) { /* Error Here */ }
}
}
}
错误信息:
14 'MEngine.Entities.EntityModifier.SingleValueEntityModifier' does not contain a definition for 'AutoDetachOnFinished' and no extension method 'AutoDetachOnFinished' accepting a first argument of type 'MEngine.Entities.EntityModifier.SingleValueEntityModifier' could be found (are you missing a using directive or an assembly reference?)
我有两个问题:
- 为什么如果我删除
IEntityModifier.
编译器会报错(所以IEntityModifier.Update
会变成Update
,适用于任何已实现的方法) ? - 为什么我无法访问
AutoDetachOnFinished
?
最佳答案
您已将这些实现为 explicit interface implementations ,这意味着您只能通过接口(interface)类型的变量访问它们 - IEntityModifier
。
要么这样做:
if (((IEntityModifier)this).AutoDetachOnFinished)
或从实现中删除接口(interface)名称:
bool AutoDetachOnFinished { get; set; }
bool Finished { get { return this.mFinished; } }
关于c# - 无法访问已实现的属性(从接口(interface)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14212767/