コードがCLS準拠になるために必要な、より高度なルールは何ですか?
-
22-07-2019 - |
質問
これは、VS.NET 2005によるCLSクレームではない特定の例です。
Public Interface IDbId
Function GetNativeObject() As Object
Function Equals(ByVal compObj As IDbId) As Boolean
Function CompareTo(ByVal compObj As IDbId) As Integer
Function ToString() As String
End Interface
これは、DbId32、DbId64、DbIdStringなどのクラスで実装するインターフェイスです。これは、ネイティブデータベースの主キータイプを1つの一般的な.Netタイプに抽象化する方法です。
表示されていないのは、ネイティブデータベースタイプが指定された場合、正しい具象タイプ(たとえば、SQL Serverタイプ 'int'の新しいDbId32)をインスタンス化するファクトリメソッドです。
さて、次のようにこのインターフェイスを使用するとします。
Public MustOverride ReadOnly Property ID() As IDbId
VSは次の警告メッセージを出力するようになりました。
関数「ID」の戻りタイプはCLSクレームではありません。
次のようにインターフェイスにこの属性を追加することにより、これらの警告を停止できます。
<CLSCompliant(True)> _
Public Interface IDbId
...
このインターフェースで定義されている機能のどれも、文書化されているルールを破っているようですこちら。では、なぜこれらの警告が表示されるのですか?
解決
例のMustOverrideキーワード修飾子によるものだと思います。 これをチェックしてください: 非CLS準拠の「MustOverride」メンバーは、CLS準拠のクラスでは許可されていません
他のヒント
FXCop を実行すると、常に何が指摘されているようですDLLをCLS準拠にするには
.netリフレクターを使用して、属性の有無にかかわらず生成されたコードを調べ、違いがあるかどうかを確認します。
存在し、違いを明確に説明していない場合(つまり、唯一の違いがCLICompliant属性である場合)、調査結果を使用して質問を修正します。 p>
所属していません StackOverflow