CA1405: COM 参照可能な型の基本型は COM 参照可能でなければなりません
TypeName |
ComVisibleTypeBaseTypesShouldBeComVisible |
CheckId |
CA1405 |
分類 |
Microsoft.Interoperability |
互換性に影響する変更点 |
DependsOnFix |
原因
コンポーネント オブジェクト モデル (COM: Component Object Model) 参照可能な型が、COM 参照不可能な型から派生しています。
規則の説明
COM 参照可能な型が、新しいバージョンのメンバーを追加するときは、厳密なガイドラインに従い、現在のバージョンにバインドする COM クライアントの動作に悪影響を与えないようにする必要があります。COM 参照不可能な型が新しいメンバーを追加する場合には、これらの COM バージョン管理規則に従う必要はありません。ただし、COM 参照可能な型が COM 参照不可能な型から派生し、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) {}
}
}