Должен ли я игнорировать InterfaceMethodsShouldBeCallableByChildTypes для сгенерированного WPF кода?

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

  •  20-08-2019
  •  | 
  •  

Вопрос

При использовании FxCop 1.36 для приложения WPF с единственным окном, которое еще предстоит изменить, я получаю ошибку InterfaceMethodsShouldBeCallableByChildTypes со следующими подробностями:

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

Следует ли это просто игнорировать?

Это было полезно?

Решение

Игнорируйте это, это стандартный код, который есть в каждом приложении WPF, и вы не видите, чтобы люди жаловались на то, что net может вызывать IComponentConnector.Подключайтесь из производных классов - так что это, вероятно, безопасно.

В целом, я думаю, вам следует рассматривать выходные данные FxCop как предложения, которые необходимо тщательно рассмотреть, в прошлом я получал много плохих советов от FxCop.

Другие советы

Зависит от того, что вы ожидаете от наследника.

Если вы не ожидаете, что этот класс будет унаследован, то он должен быть запечатан, и проблема исчезнет.

Если вы ожидаете, что он будет унаследован, то вы используете способность наследующего класса переопределять методы интерфейса и по-прежнему вызывать их (т.Е. base.methodname()).Если таково ваше намерение, то вы можете проигнорировать предупреждение.

Однако, это не ожидаемое поведение для наследуемых классов, поэтому вы должны предоставить интерфейс публично (т.е.Неявный интерфейс вместо явного интерфейса).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top