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

时间:2013-01-08 10:20:17

标签: c# .net syntax

我有一个属性接口:

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'可以   发现(你错过了使用指令或程序集   引用?)

我有两个问题:

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

3 个答案:

答案 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)