当使用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)
}
这应该被忽略吗?
答案 0 :(得分:0)
取决于您对继承人的期望。
如果你不期望这个类被继承,那么它应该被密封并且问题就会消失。
如果您希望它被继承,那么您正在使用继承类的能力来覆盖接口方法并仍然调用它们(即base.methodname()
)。如果这是你的意图,那么你可以忽略警告。
但是,对于可继承类,这是不预期的行为,因此您应该公开公开接口(即隐式接口而不是显式接口)。
答案 1 :(得分:0)
忽略它,这是每个WPF应用程序中的标准代码,并且您没有看到人们抱怨net能够从派生类调用IComponentConnector.Connect - 所以它可能是安全的。
总的来说,我认为你应该把FxCop输出作为必须仔细考虑的建议来处理,我过去从FxCop那里得到了很多不好的建议。