Devrais-je ignorer InterfaceMethodsShouldBeCallableByChildTypes pour le code généré par WPF?

StackOverflow https://stackoverflow.com/questions/351228

  •  20-08-2019
  •  | 
  •  

Question

Lorsque j'utilise FxCop 1.36 pour une application WPF avec une fenêtre unique qui n'a pas encore été modifiée, j'obtiens l'erreur InterfaceMethodsShouldBeCallableByChildTypes avec les détails suivants:

    Target       : #System.Windows.Markup.IComponentConnector.Connect(System.Int32,System.Object)  (IntrospectionTargetMember)
    Resolution   : "Make 'MainWindow' sealed (a breaking change if 
                   this class has previously shipped), implement the method 
                   non-explicitly, or implement a new method that exposes 
                   the functionality of 'IComponentConnector.Connect(int,
                    object)' and is visible to derived classes."
    Help         : http://msdn2.microsoft.com/library/ms182153(VS.90).aspx  (String)
    Category     : Microsoft.Design  (String)
    CheckId      : CA1033  (String)
    RuleFile     : Design Rules  (String)
    Info         : "Explicit method implementations are defined with private 
                   accessibility. Classes that derive from classes with 
                   explicit method implementations and choose to re-declare 
                   them on the class will not be able to call into the 
                   base class implementation unless the base class has 
                   provided an alternate method with appropriate accessibility. 
                   When overriding a base class method that has been hidden 
                   by explicit interface implementation, in order to call 
                   into the base class implementation, a derived class 
                   must cast the base pointer to the relevant interface.
                    When calling through this reference, however, the 
                   derived class implementation will actually be invoked,
                    resulting in recursion and an eventual stack overflow."
    Created      : 08/12/2008 22:26:37  (DateTime)
    LastSeen     : 08/12/2008 22:41:05  (DateTime)
    Status       : Active  (MessageStatus)
    Fix Category : NonBreaking  (FixCategories)
}

Doit-on simplement ignorer cela?

Était-ce utile?

La solution

Ignorez-le. Il s'agit du code standard utilisé dans toutes les applications WPF et vous ne voyez pas les gens se plaindre de la capacité d'Internet d'appeler IComponentConnector.Connect à partir de classes dérivées. Il est donc probablement sûr.

En général, je pense que vous devriez traiter les résultats de FxCop comme des suggestions qui doivent être examinées avec soin. J'ai eu de nombreux mauvais conseils de FxCop dans le passé.

Autres conseils

Dépend de ce que vous attendez d'un héritier.

Si vous ne vous attendez pas à ce que cette classe soit héritée, alors elle devrait être scellée et le problème disparaîtra.

Si vous vous attendez à ce qu’il soit hérité, vous prenez la possibilité pour la classe qui hérite de remplacer les méthodes d’interface et de les appeler (c.-à-d. base.methodname()). Si tel est votre intention, vous pouvez ignorer l'avertissement.

Toutefois, comme ce n'est pas le comportement attendu pour les classes pouvant être héritées, vous devez exposer publiquement l'interface (c'est-à-dire une interface implicite au lieu d'une interface explicite).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top