无法访问已实现的属性(来自界面)

Luk*_* Vo 8 .net c# syntax

我有一个属性接口:

public interface IEntityModifier
{

    ...
    bool AutoDetachOnFinished { get; set; }
    bool Finished { get; }
    ...

}
Run Code Online (Sandbox Code Playgroud)

然后我实现它:

    bool IEntityModifier.AutoDetachOnFinished { get; set; }
    bool IEntityModifier.Finished { get { return this.mFinished; } }
Run Code Online (Sandbox Code Playgroud)

但是当我需要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 */ }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

错误消息:

14'MEngine.Entities.EntityModifier.SingleValueEntityModifier'不包含'AutoDetachOnFinished'的定义,并且没有扩展方法'AutoDetachOnFinished'接受类型'MEngine.Entities.EntityModifier.SingleValueEntityModifier'的第一个参数可以找到(你错过了使用吗?指令或程序集引用?)

我有两个问题:

  1. 如果我删除IEntityModifier.s ,编译器为什么会抱怨(因此IEntityModifier.UpdateUpdate适用于任何已实现的方法)?
  2. 为什么我不能访问AutoDetachOnFinished

Ode*_*ded 12

您已将这些实现为显式接口实现,这意味着您只能通过接口类型的变量访问它们 - IEntityModifier.

这样做:

if (((IEntityModifier)this).AutoDetachOnFinished)
Run Code Online (Sandbox Code Playgroud)

或从实现中删除接口名称:

bool AutoDetachOnFinished { get; set; }
bool Finished { get { return this.mFinished; } }
Run Code Online (Sandbox Code Playgroud)