[解決済み] C#でカスタム属性を作成する方法
2022-05-13 01:01:32
質問
どなたか、カスタム属性のごく基本的な例をコードで説明していただけませんか?
どのように解決するのですか?
カスタム 属性 を作成するコードはかなり単純ですが、属性が何であるかを理解することは非常に重要です。
属性は、プログラムにコンパイルされたメタデータです。属性自体はクラス、プロパティ、またはモジュールに何の機能も追加しません - ただのデータです。しかし、リフレクションを使うことで、機能を作るためにその属性を活用することができます。
では、例えば バリデーション・アプリケーション・ブロック から、Microsoft の エンタープライズ ライブラリ . コード例を見てみると
/// <summary>
/// blah blah code.
/// </summary>
[DataMember]
[StringLengthValidator(8, RangeBoundaryType.Inclusive, 8, RangeBoundaryType.Inclusive, MessageTemplate = "\"{1}\" must always have \"{4}\" characters.")]
public string Code { get; set; }
上記のスニペットから、コードを変更するときはいつでも、バリデータのルール(例では、少なくとも8文字、最大8文字を持っている)に従って、常に検証されるだろうと思うかも知れません。しかし、実際には、Attributeは何もしません。前述のように、プロパティにメタデータを追加するだけです。
しかし、Enterprise Library では
Validation.Validate
メソッドがあり、オブジェクトを調べて、それぞれのプロパティについて、その内容が属性によって通知されたルールに違反しているかどうかをチェックします。
つまり、これが属性について考えるべき方法です -- 後に他のメソッド/クラス/その他によって使用されるかもしれないデータをコードに追加する方法です。
関連
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] C#の[Flags]Enum属性の意味とは?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] JavaScriptSerializer - 列挙型を文字列としてJSONシリアライズする
-
[解決済み] async」と「await」の使い方とタイミング
-
[解決済み] LINQのGroup by
-
[解決済み] C#で同期メソッドから非同期メソッドを呼び出すには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み] 2つのリストを結合する
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み】.NETの属性とは何ですか?