Должен ли я игнорировать InterfaceMethodsShouldBeCallableByChildTypes для сгенерированного кода WPF? - PullRequest
2 голосов
/ 09 декабря 2008

При использовании 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)
}

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

Ответы [ 2 ]

0 голосов
/ 09 декабря 2008

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

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

0 голосов
/ 09 декабря 2008

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

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

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

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

...