Module
Langsという名前のDLLファイルがあります。このモジュール内の私はAvailableLanguage
というクラスを持って、クラス定義は以下の通りです:オペレータまたはIEquatableインターフェイスCLS準拠ですか?
Public Class AvailableLanguage
Implements IEquatable(Of AvailableLanguage)
Private _langID As Integer
Private _langName As String
Public ReadOnly Property LanguageID As Integer
Get
Return _langID
End Get
End Property
Public ReadOnly Property LanguageName As String
Get
Return _langName
End Get
End Property
Public Sub New(ID As Integer, Name As String)
_langID = ID
_langName = Name
End Sub
Public Overrides Function Equals(obj As Object) As Boolean
If obj Is Nothing Then Return False
Dim L1 As AvailableLanguage = CType(obj, AvailableLanguage)
Return Me.Equals1(L1)
End Function
Public Function Equals1(other As AvailableLanguage) As Boolean Implements IEquatable(Of AvailableLanguage).Equals
Return Me.LanguageID = other.LanguageID
End Function
Public Shared Operator =(Lang1 As AvailableLanguage, Lang2 As AvailableLanguage)
Return Lang1.Equals1(Lang2)
End Operator
Public Shared Operator <>(Lang1 As AvailableLanguage, Lang2 As AvailableLanguage)
Return Not Lang1.Equals1(Lang2)
End Operator
Public Overrides Function ToString() As String
Return _langName
End Function
End Class
私は、Windowsフォームを含む別のDLLにこのクラスを使用します。今の私のWindowsフォームはかなり空です:
タイプ 'AvailableLanguageは' CLSに準拠していません。
Public Class LanguageSettings Public Property AvailableLanguages As List(Of Langs.AvailableLanguage) End Class
しかし、すぐそこには、Visual Studioの2012のExpressは言って、私に警告をスローします。
From MSDN、私は、いくつかのタイプはクラスまたは関数ではないCLS準拠を作ることを理解ししかし私はそれらのいずれかを使用していないよ、これは単なる整数と文字列です。
私はTrueにCLS Compliant Attributeを持っていた場合、私は警告を非表示にすることができます:
<CLSCompliant(True)>
thsiクラスは、CLSに準拠していない理由を私は理解していないが。
明らかに、それはプロパティタイプのためではありません。だから、残っている:それは1(Tの)
- IEquatableインターフェイス
- =と<>演算子
?
EDIT
私はすべての機能とインタフェースを除去し、全く同じ結果を得ました。私はいくつかの読み取り専用のプロパティ(Integer型とString型)を持つオブジェクトを作成しています。そして、フォームクラスは、AvailableLanguageがCLS準拠ではないことを教えてくれます。
私は私のフォームクラスで型AvailableLanguageのプライベートフィールドを追加した場合、警告が表示されていない:
Public Class LanguageSettings
Private L As Langs.AvailableLanguage 'No warning
Public Property AvailableLanguages As List(Of Langs.AvailableLanguage) 'Warning
End Class
を私はhonnestlyに行くとどのようにこれが準拠事の作品をCLSているものを理解したいと思います。
「どちらですか? - それは、警告が消えるまでメンバーを一度に1つずつ削除することによって、あなた自身で答えることができるように思えます。あなたはEqualsをオーバーライドしていますが、関連性のあるGetHashCodeはオーバーライドしていません。 –
@JonSkeet実際に私は質問のタイトルを変更するかもしれませんが、それはどちらでもありません。私はプロパティを除くすべてを削除し、同じ問題がまだあります。 –
[mcve]を指定すると確かに役立ちます。 –