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
...
このインターフェイスが定義する関数はどれも、ここに記載されている規則に違反しているようには見えません。では、VS がこれらの警告を表示するのはなぜですか?