質問

これは、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>

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top