2010-10-18 13 views
8

Aşağıdaki koda sahibim:Kod Analizi Uyarı 2214 - En iyi nasıl düzeltilir?

 public partial class AuditLog : IBusinessEntity 
    { 
     public BusinessEntityType EntityType { get { return BusinessEntityType.AuditLog; } } 

     /// <summary> 
     /// Constructor accepting parameter initialization arguments 
     /// </summary> 
     /// <param name="userName"></param> 
     /// <param name="entity"></param> 
     /// <param name="command"></param> 
     /// <param name="commandText"></param> 
     public AuditLog(string userName, BusinessEntityType entity, AuditLogCommand command, string commandText) 
     { 
      this.Timestamp = DateTime.Now; 
      this.UserName = userName; 
      this.Entity = entity.ToString(); 
      this.Command = command.ToString(); 
      this.CommandText = commandText; 
     } 
    } 

Bu bir CA2214 uyarısı üretiyor. Xzx29 ve AuditLogCommand yöntem parametreleri her iki numaralandırmdır. Sorunun ne olduğunu göremiyorum ve bu yüzden uyarının nasıl giderileceğinden emin değilim.

Teşekkürler.

cevap

14

Bir veya daha fazla özellik sanal mı? O zaman, bu yüzden, CA2214 is the "Do not call overridable methods in constructors" uyarısından beri.

sanal yöntemi denir

, yöntem yürütür fiili tip çalışma süresi kadar seçilmemiş: Burada

MSDN'den kural için bir mantıktır. Bir yapıcısı bir sanal yöntem çağırdığında, yapıcısının yöntemini çağıran örneğinin yürütülmemesi olasıdır. Bu ne anlama

olan birisi sınıfından miras ve senin oluşturucu içinde erişilen bir yöntem veya özellik geçersiz kılar eğer - o zaman öncelikli uygulama kalıtsal sınıf için yapıcı önce taşıyor olacaklar vardır koşmak. Bu, geçersiz kılma uygulamasının yapıcıda ayarlanan duruma dayanması durumunda sorunlara yol açabilir.

Uyarıyı yerine getirmek için, sanal olmayan yapıda erişilen özellikleri ve yöntemleri yapmanız gerekir (uygunsa, türü mühürlü hale getirebilirsiniz).

+0

'this.Entity' satırı ortaya çıktığında, sanal bir yöntemi çağıran bir düzenleyici var. Sanırım sorun buydu. –

+0

Evet, statik analizör görebiliyorsa uyarı, ctor sırasında herhangi bir sanal yöntemin çağrıldığını görecektir. – driis

İlgili konular