なぜこの名前をアンダースコアなCLSに対応してますか?
-
19-09-2019 - |
質問
なぜか、コンパイラの警告
Identifier'トです。DomainObjectBase._isNewなく変更になることがありCLS対応
以下のコードについて教えてください。
public abstract class DomainObjectBase
{
protected bool _isNew;
}
解決
共通言語仕様のます:
CLS準拠の言語コンパイラを起動することができますし、識別子に含まれる文字のセットを支配するUnicode標準3.0のテクニカルレポート15、の附属書7の規則に従わなければなりません。この規格は、UnicodeコンソーシアムのWebサイトから入手可能です。
あなたはこれを見ると:
すなわち、識別子の最初の文字は大文字、小文字、タイトルケース文字、修飾文字、他の文字、または文字の数とすることができます。識別子の後続の文字が結合マーク、小数、コネクタ句読点、および(例えば左右マークなど)フォーマッティングコード間隔、それらのいずれかの、プラス非間隔をマークすることができます。通常フォーマッティングコードを格納または識別子を比較する前に除外しなければならない。
基本的に、あなたはアンダースコアで識別子を起動することはできません - 。これは、目に見える(保護/パブリック)フィールドに準拠したCLSに違反
他のヒント
CLSの遵守 な相互運用性の異なる .当期純 言語.本物件は、なCLS対応で始まるアンダースコアは公開(注:保護特性のpublicクラスアクセスできるのは外部からの情報を総合このままのアクセスからのC#でない場合はからアクセス。NET言語を許可しないべきでのプロパティ名となCLSに対応しています。
だってこのコンパイラエラーがどこかにコードを使ってラベルを付けお客様組立てCLSの遵ラインのようなこと:
[assembly: CLSCompliant(true)]
Visual Studioを含むこのラインのAssemblyInfo.csファイルができることがありますので、物件です。
このエラーまでのいずれかの
名前を変更件(推奨):
protected bool isNew;
設定一連の構成部品の組立てを行うことができるものとします。CLS対応:
[assembly: CLSCompliant(false)]
属性を追加するだけでお件:
[CLSCompliant(false)] protected bool _isNew;
変更の範囲の物件ですので、こでしか見ることができないの外ます。
private bool _isNew;
_isNew
を持つ有力アンダースコアに付随見えている(つまり、プライベートではありません)。
アンダースコアは、問題が発生します。一般的な方法は、アンダースコアはprivateフィールドのために予約されていることです。保護/パブリックメンバが適切に同棲して名前を付ける必要があります。
例
public abstract class DomainObjectBase{
private bool _isNew;
protected bool IsNew { get { return _isNew; } set { _isNew = value;} }
}
OR、あなたは3.xのを使用して、プライベートフィールドを取り除くしたい場合:
public abstract class DomainObjectBase{
protected bool IsNew { get; set; }
}
CLS準拠識別子は下線で始めるべきではない。
これは、アンダースコアです。この記事を参照してください。
大手_非CLSに準拠します。
マイクロソフト StyleCop のコードを分析し、なぜそれを説明するreleventドキュメントへのリンクを提供します対応CLSされていません。
データメンバーの名前、_isNew
、アンダースコアでのを開始します。