c# - 无法访问已实现的属性(从接口(interface))

标签 c# .net syntax

我有一个带有属性的接口(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?)

我有两个问题:

  1. 为什么如果我删除 IEntityModifier. 编译器会报错(所以 IEntityModifier.Update 会变成 Update,适用于任何已实现的方法) ?
  2. 为什么我无法访问 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/

相关文章:

regex - m 和 rx 之间有什么区别吗?

javascript - C#客户端与浏览器的通信

C# Datareader 到 DTO?

c# - 不可变对象(immutable对象)中的浅拷贝与深拷贝

c# - 如何使用 RavenDb 默认 ID 生成器获取连续 ID

javascript - localStorage.getItem ('item' ) 是否优于 localStorage.item 或 localStorage ['item' ]?

javascript - document.getElementById 在 asp.net 中的 <div> 上失败

c# - 对象等于 - 不覆盖等于的纯对象或引用类型的基本逻辑是什么?

.net - 等待单个 RabbitMQ 消息超时

syntax - Rust 匹配语句需要逗号吗?