、あなたが使用することを検討することができ、オプションとして:
あなたがこの方法を登録できる属性が本当にあなたのクラス属性ではありませんが、ほとんどのフレームワークは使用それらはあなたのクラスネイティブ属性のようです。
データアノテーション属性を追加する場合は、特にASP.NET MVC
プロジェクトとしてこの方法が役立ちます。
Windows Forms
などの他のフレームワークでは、MetadataTypeAttribute
をサポートしていない場合は、単にAssociatedMetadataTypeTypeDescriptionProvider
を使用してサポートを追加できます。
解決策はデータ注釈属性に限定されず、ライブラリとフレームワークにとって意味のあるすべての種類の属性を使用できます。
追加の属性を定義する方法は?
適切な属性で装飾された元のクラスのプロパティを含むメタデータクラスを作成し、MetadataType
属性で部分クラスを修飾し、元のクラスのメタデータクラスを導入できます。
これらの属性の影響を確認するにはどうすればよいですか?
ASP.NET MVC
などのフレームワークは、元のクラスで定義されているような属性を使用します。
AssociatedMetadataTypeTypeDescriptionProvider
また、を、他のフレームワークまたはコンポーネントの元のタイプのプロバイダとして登録して、TypeDescriptor
を使用して自分のタイプに関する情報を取得することもできます。
本当にクラス属性ですか。
、このように注意を払ってください、属性が本当にあなたの元のクラスに属していないが、ASP.NET MVC
や種類に関する情報を取得するためにTypeDescriptor
を使うWindows Forms
などのほとんどのフレームワーク、のために、彼らはあなたのクラス元の属性のように振る舞います。
リフレクションを使用してプロパティの属性を取得する場合は表示できませんが、TypeDescriptor
メカニズムを使用している場合は、それらを参照できます。
アン例
Hazaaクラス:
public partial class Hazaa
{
public int Shazoo { get; set; }
}
HazaaMetadataクラス
[MetadataType(typeof(HazaaMetadata))]
public partial class Hazaa
{
}
public class HazaaMetadata
{
[DisplayName("Shazoo Name")]
public int Shazoo { get; set; }
}
ASP.NET MVCの使用
あなたはそのDisplayName
仕事をするために何もする必要はありません、あなたは単に影響を確認するためにHtml.Labelfor
またはHtml.DisplayNameForm
を使用することができます。ラベルテキストとして「Shazoo Name」が表示されます。
Windowsが使用
アプリケーション内のいくつかの場所(...、メイン、フォームのロードなど)プロバイダーをこのように登録フォーム:
var provider = new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Hazaa));
TypeDescriptor.AddProvider(provider, typeof(Hazaa));
、結果として、あなたが表示されますPropertyGrid
およびDataGridView
は、プロパティおよび列タイトルのキャプションとして「Shazoo Name」を使用します。
(1)ダーン...(2)部分**メンバー**?最初の部分は、あなたが確かに理解するように、自動生成されます。 **自動生成が変更されていない**私が制御しているファイルから部分的になるようにすることはできますか? (3)簡潔さのため+1。 –
疑問点としては、部分的なメンバを実装するための特別な構文要件があります。たとえば、 'partial'キーワードを指定し、アクセス修飾子を指定しないようにします。 –