2015-04-13 19 views
5

Kullanmakta olduğum bir olay var, bu yüzden gerçekten bu uyarının ne anlama geldiğini anlamıyorum. Birisi açıklayabilir mi?Derleyici Uyarısı CS0067: Olay hiç kullanılmıyor

benim diğer sınıfta
public abstract class Actor<T> : Visual<T> where T : ActorDescription 
{ 
    #region Events 
    /// <summary> 
    /// Event occurs when the actor is dead 
    /// </summary> 
    public event Action Dead; 
    #endregion 

/// <summary> 
    /// Take damage if the actor hasn't taken damage within a time limit 
    /// </summary> 
    /// <param name="damage">amount of damage</param> 
    public void TakeDamage(int damage) 
    { 
     if (damage > 0 && Time.time > m_LastHitTimer + m_DamageHitDelay) 
     { 
      m_CurrentHealth -= damage; 

      if (m_CurrentHealth <= 0) 
      { 
       m_CurrentHealth = 0; 

       if (Dead != null) 
        Dead(); 
      } 
      else 
       StartCoroutine(TakeDamageOnSprite()); 

      m_LastHitTimer = Time.time; 
     } 
    } 

, kaydolmak ve olay için kaydını: Actor<T> soyut sınıfın yana

 if (m_Player != null) 
      m_Player.Dead += OnPlayerDead; 

     if (m_Player != null) 
      m_Player.Dead -= OnPlayerDead; 

cevap

9

ve Actor<T> içindeki hiçbir kod olay yükseltir, olay soyut yapabilirsiniz:

public abstract event Action Dead; 

Sonra Actor<T> devralan alt sınıf (ler) in, etkinliği geçersiz:

Bir alt sınıf aslında olayı yükseltmek vermezse
public override event Action Dead; 

, o zaman boş add ve remove yöntemleri (this blog post bakınız) olay vererek uyarıyı bastırmak olabilir.

public override event Action Dead 
{ 
    add { } 
    remove { } 
} 
+0

Ohhhh. Bu tam anlamıyla yapar! Teşekkür ederim! –

1

Asıl sorun, Unity ve Mono 2.6 kullanıyorum ve hala bir hatadır. Bu nedenle, Blorgbeard'ın söylediği öneriyi kullanmaya teşebbüs ettim; Visual Studio için çalıştı, ancak derleyici için değil.

Yani olay etrafında #pragma uyarı devre dışı bırakma veya genel tür geçirerek iki çözüm vardır. şöyle

:

public abstract class Actor<T> : Visual<T> where T : ActorDescription 
{ 
    #region Events 
    /// <summary> 
    /// Event occurs when the actor is dead 
    /// </summary> 
    public event Action<Actor<T>> Dead; 
    #endregion 

    ... 

    private void SomeFunc() 
    { 
     if (Dead != null) 
      Dead(); 
    } 
} 
İlgili konular