Вот конкретный пример, который не является жалобой на CLS согласно VS.NET 2005.
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.
Я не показываю фабричный метод, который создает экземпляр правильного конкретного типа (например, новый DbId32 для типа «int» SQL Server) с учетом собственного типа базы данных.
Теперь предположим, что я использую этот интерфейс следующим образом:
Public MustOverride ReadOnly Property ID() As IDbId
VS теперь выводит это предупреждающее сообщение:
Тип возврата функции «ID» не является жалобой на CLS.
Я могу остановить эти предупреждения, добавив этот атрибут в свой интерфейс следующим образом:
<CLSCompliant(True)> _
Public Interface IDbId
...
Ни одна из функций, определенных в этом интерфейсе, похоже, не нарушает задокументированных правил здесь. Итак, почему VS отображает эти предупреждения?