我有一个属性接口:
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'确实 不包含'AutoDetachOnFinished'的定义,也没有扩展名 方法'AutoDetachOnFinished'接受类型的第一个参数 'MEngine.Entities.EntityModifier.SingleValueEntityModifier'可以 发现(你错过了使用指令或程序集 引用?)
我有两个问题:
IEntityModifier.
s(因此IEntityModifier.Update
将成为Update
,适用于任何已实施的方法),为什么编译器会抱怨?AutoDetachOnFinished
?答案 0 :(得分:12)
您已将这些实现为explicit interface implementations,这意味着您只能通过接口类型的变量IEntityModifier
来访问它们。
要么这样做:
if (((IEntityModifier)this).AutoDetachOnFinished)
或从实现中删除接口名称:
bool AutoDetachOnFinished { get; set; }
bool Finished { get { return this.mFinished; } }
答案 1 :(得分:3)
因为您正在明确地实现接口。
bool IEntityModifier.AutoDetachOnFinished { get; set; }
您必须转换为接口才能访问显式实现。也许不是你想要的。因此,从实现中删除接口名称
bool AutoDetachOnFinished { get; set; }
答案 2 :(得分:1)
将this.AutoDetachOnFinished转换为IEntityModifier类型的对象,因为您正在进行显式的Interface实现。 here some explanation.
IEntityModifier entitymodifier=(IEntityModifier)objectInstanceOfimplementedClass;
if( entitymodifier.AutoDetachOnFinished)