C# 无法访问实现的属性(从接口)

C# 无法访问实现的属性(从接口),c#,.net,syntax,C#,.net,Syntax,我有一个与属性的接口: public interface IEntityModifier { ... bool AutoDetachOnFinished { get; set; } bool Finished { get; } ... } 然后我实施它: bool IEntityModifier.AutoDetachOnFinished { get; set; } bool IEntityModifier.Finished { get { r

我有一个与属性的接口:

public interface IEntityModifier
{

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

}
然后我实施它:

    bool IEntityModifier.AutoDetachOnFinished { get; set; }
    bool IEntityModifier.Finished { get { return this.mFinished; } }
但是当我需要在同一个类中访问
autodetactionfinished
时,会弹出一个编译器错误:

    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”可以是 找到(是否缺少using指令或程序集 参考?)

我有两个问题:

  • 如果我删除
    IEntityModifier.
    s(因此
    IEntityModifier.Update
    将成为
    Update
    ,应用于任何实现的方法),编译器为什么会抱怨
  • 为什么我不能访问
    AutoDetachOnFinished

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

    要么这样做:

    if (((IEntityModifier)this).AutoDetachOnFinished)
    
    或从实现中删除接口名称:

    bool AutoDetachOnFinished { get; set; }
    bool Finished { get { return this.mFinished; } }
    

    因为您正在显式地实现接口

    bool IEntityModifier.AutoDetachOnFinished { get; set; }
    
    必须强制转换到接口才能访问显式实现。也许不是你想要的。因此,请从实现中删除接口名称

    bool AutoDetachOnFinished { get; set; }
    

    在执行显式接口实现时,将this.autodetactionfinished转换为IEntityModifier类型的对象

      IEntityModifier entitymodifier=(IEntityModifier)objectInstanceOfimplementedClass;
    
         if( entitymodifier.AutoDetachOnFinished)