2013-01-08 4 views
8

を実装するプロパティにアクセスすることはできませんコンパイラエラーが飛び出し:は、私は性質とのインタフェースを持っている(インターフェイスから)

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ディレクティブまたはアセンブリ参照 不足している?)

を、私は2つの質問があります。

  1. IEntityModifier.を削除した場合、コンパイラがエラーになるのはなぜですか(IEntityModifier.UpdateUpdateになりますので、実装された方法には適用されます)。
  2. AutoDetachOnFinishedにアクセスできないのはなぜですか?

答えて

12

これらはexplicit interface implementationsとして実装されています。つまり、インターフェイスタイプの変数 - IEntityModifierでのみアクセスできます。

どちらかそれを実行します。

if (((IEntityModifier)this).AutoDetachOnFinished) 

または実装からインターフェイス名を削除します。

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

明示的インターフェイスを実装しているので。

bool IEntityModifier.AutoDetachOnFinished { get; set; } 

明示的な実装にアクセスするには、インターフェイスにキャストする必要があります。おそらくあなたが望むものではありません。だから、あなたが明示的インターフェイスの実装を行っているようなタイプIEntityModifierの対象とするthis.AutoDetachOnFinished実装

bool AutoDetachOnFinished { get; set; } 
1

変換からインターフェイス名を削除します。 here some explanation.

IEntityModifier entitymodifier=(IEntityModifier)objectInstanceOfimplementedClass; 

    if(entitymodifier.AutoDetachOnFinished) 
関連する問題