型別名稱 |
ComVisibleTypeBaseTypesShouldBeComVisible |
CheckId |
CA1405 |
分類 |
Microsoft.Interoperability |
中斷變更 |
DependsOnFix |
原因
元件物件模型 (COM) 可見的型別衍生自非 COM 可見的型別。
規則描述
當 COM 可見型別在新版本中加入成員時,它必須遵守嚴格的方針,以免中斷繫結至目前版本的 COM 用戶端。COM 不可見的型別假設在加入新成員時不必遵循這些 COM 版本控制規則。但是,如果 COM 可見型別衍生自 COM 不可見的型別,並且公開 (Expose) ClassInterfaceType.AutoDual 或 AutoDispatch (預設值) 的類別介面,則基底型別的所有公用成員 (除非這些公用成員特別標記為 COM 不可見,這可能會是多餘的) 都會公開至 COM。如果基底型別在後來的版本中加入新成員,則可能會中斷繫結至衍生型別之類別介面的任何 COM 用戶端。COM 可見型別應該只會衍生自 COM 可見型別,以減少中斷 COM 用戶端的可能性。
如何修正違規
若要修正這項規則的違規情形,請使基底型別成為 COM 可見的或使衍生型別成為 COM 不可見的。
隱藏警告的時機
請勿隱藏此規則的警告。
範例
下列範例顯示違反規則的型別。
Imports System
Imports System.Runtime.InteropServices
<Assembly: ComVisibleAttribute(False)>
Namespace InteroperabilityLibrary
<ComVisibleAttribute(False)> _
Public Class BaseClass
Sub SomeSub(valueOne As Integer)
End Sub
End Class
' This class violates the rule.
<ComVisibleAttribute(True)> _
Public Class DerivedClass
Inherits BaseClass
Sub AnotherSub(valueOne As Integer, valueTwo As Integer)
End Sub
End Class
End Namespace
using System;
using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
[ComVisible(false)]
public class BaseClass
{
public void SomeMethod(int valueOne) {}
}
// This class violates the rule.
[ComVisible(true)]
public class DerivedClass : BaseClass
{
public void AnotherMethod(int valueOne, int valueTwo) {}
}
}