理解CLSの遵守と正しいコード
-
05-09-2019 - |
質問
私たを抽象化された制御管理の状態です。しかしながら、ラボの一部CLSの課題としたい人に提供できる、一部の気づきを得ることになる。
私は列挙など:
<Flags()> _
Public Enum FormState
Read = 1
Edit = 2
Insert = 4
End Enum
Aクラスなど:
Public MustInherit Class Fields
Inherits System.Web.UI.UserControl
Public Property State() As Enumerators.FormState
Get
Return _State
End Get
Set(ByVal value As Enumerators.FormState)
_State = value
ToggleState(value)
End Set
End Property
Protected MustOverride Sub ToggleState(ByVal state As FormState)
End Class
ようとするとコンパイルのこのコードに残ることを警告する 状態 プロパティは中核的労働基準に準拠しに関する情報は見つかりませんでし 状態 引数です。これはなぜなのでしょうか?どうしたいので正しいこの問題を除去を示す
- またの追加 <CLSCompliant(True)> 属性の両方の項目のない運
- また普及のためにMSDNの記事 非中核的労働基準に準拠した'MustOverride"加することは認められないCLS対応 のコードと結果
- たって変化するのにaccessors
Friend
の代わりにPublic
- たっての指定の型の列挙型(
Integer
やUInteger
)
解決
あなたのコードを見てみると、列挙型は、列挙子と呼ばれるクラスの一部であるように思われます。このクラスは、コードに表示されていないが、私はあなたがそれを完全に制御を持っていると仮定しています。
クラスは、同様にCLS準拠した属性でタグ付けする必要があります。
他のヒント
クラス、メソッドとプロパティは次のように見えるように、
の警告を削除するには、次の属性を追加します:
<CLSCompliant(False)> _
Public MustInherit Class Fields
Inherits System.Web.UI.UserControl
<CLSCompliant(False)> _
Public Property State() As Enumerators.FormState
Get
Return _State
End Get
Set(ByVal value As Enumerators.FormState)
_State = value
ToggleState(value)
End Set
End Property
<CLSCompliant(False)> _
Protected MustOverride Sub ToggleState(ByVal state As FormState)
End Class
これは、あなたが警告を削除したいコンパイラに、あなたはあなたのコードがCLSCompliantではない認識していることを意味します。
それはあなたが値0でアイテムを持っていないことが考えられます。
所属していません StackOverflow