这是根据 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 等类实现的接口。它是一种将本机数据库主键类型抽象为一个常见的 .Net 类型的方法。
我没有显示的是工厂方法,它实例化正确的具体类型(例如,SQL Server 类型“int”的新 DbId32)给定本机数据库类型。
现在假设我像这样使用这个界面:
Public MustOverride ReadOnly Property ID() As IDbId
VS 现在输出此警告消息:
函数“ID”的返回类型不是 CLS 投诉的。
我可以通过将此属性添加到我的界面来停止这些警告,如下所示:
<CLSCompliant(True)> _
Public Interface IDbId
...
此接口定义的所有功能似乎都没有违反此处记录的规则。那么为什么 VS 会显示这些警告呢?