¿Debo ignorar InterfaceMethodsShouldBeCallableByChildTypes para el código generado por WPF?

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

  •  20-08-2019
  •  | 
  •  

Pregunta

Cuando uso FxCop 1.36 para una aplicación WPF con una sola ventana que aún no se ha modificado, obtengo el error InterfaceMethodsShouldBeCallableByChildTypes con los siguientes detalles:

    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)
}

¿Debe esto simplemente ser ignorado?

¿Fue útil?

Solución

Ignórelo, este es el código estándar que se encuentra en cada aplicación WPF y no ve a las personas quejándose de que net pueda llamar a IComponentConnector.Connect desde clases derivadas, por lo que probablemente sea seguro.

En general, creo que debería manejar la salida de FxCop como sugerencias que deben ser consideradas cuidadosamente, he recibido muchos malos consejos de FxCop en el pasado.

Otros consejos

Depende de lo que espere que haga un heredero.

Si no espera que esta clase se herede, entonces debe sellarse y el problema desaparecerá.

Si espera que se herede, entonces está tomando la capacidad de la clase heredadora de anular los métodos de interfaz y aún llamarlos (es decir, base.methodname()). Si esa es su intención, puede ignorar la advertencia.

Sin embargo, ese no es comportamiento esperado para las clases heredables, por lo que debe exponer la interfaz públicamente (es decir, una interfaz implícita en lugar de una interfaz explícita).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top