Devo ignorar InterfaceMethodsShouldBeCallableByChildTypes para código gerado WPF?

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

  •  20-08-2019
  •  | 
  •  

Pergunta

Ao usar FxCop 1,36 para uma aplicação WPF com uma única janela que ainda tem de ser modificado, eu recebo o erro InterfaceMethodsShouldBeCallableByChildTypes com os seguintes detalhes:

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

Se isto simplesmente ser ignorada?

Foi útil?

Solução

Ignorá-lo, este é o código padrão que é em cada aplicação WPF e você não vê as pessoas reclamando sendo líquida capaz de chamar IComponentConnector.Connect de classes derivadas -. Por isso é provavelmente seguro

Em geral, eu acho que você deve lidar com a saída FxCop como sugestões que devem ser considerados com cuidado, eu tenho um monte de maus conselhos de FxCop no passado.

Outras dicas

Depende do que você esperar um inheriter fazer.

Se você não está esperando essa classe para ser herdada, então ele deve ser selado e o problema desaparece.

Se você está esperando para ser herdada, então você está tomando a capacidade da classe herdando para substituir os métodos de interface e ainda chamá-los (ou seja base.methodname()). Se essa é a sua intenção, então você pode ignorar o aviso.

No entanto, isto é não comportamento esperado para as classes herdadas por isso você deve expor a interface publicamente (Interface implícita ou seja, um em vez de uma interface explícita).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top