PropertyDescriptor
メソッドの値を返すaを使用することと、IsReadOnly()
メソッドに関連付けられているaを使用することの違いは何ReadOnlyAttribute
ですか?
3 に答える
PropertyDescriptor
主な違いは、独自の実装を (またはを介しICustomTypeDescriptor
て)提供すると、より多くの制御が可能になることです。次に、アクセス権に基づいて、書き込み可能な場合の独自のロジックを選択できます。TypeDescriptionProvider
TypeConverter
でも、はい; デフォルトの実装では、setter のないプロパティと でマークされたプロパティについては読み取り専用と報告されますReadOnlyAttribute
。
Reflector を使って見ると違いはありません。
派生クラス SimplePropertyDescriptor の 1 つに次のコードがあります。
public override bool IsReadOnly
{
get
{
return this.Attributes.Contains(ReadOnlyAttribute.Yes);
}
}
ただのメモ。
各エンティティの読み取り専用状態を個別に制御するために、アプリケーションのエンティティ オブジェクトに ICustomTypeDescriptor を実装するのに 1 日を費やしました。
したがって、それぞれの PropertyDescriptor 実装は、元のエンティティ オブジェクトへの参照を保持していたため、IsReadOnly プロパティは次のようになりました。
public override bool IsReadOnly
{
get { return _owner.IsReadOnly;}
}
ただし、コードを実行すると、BindingSource コンポーネントは、セット内の各レコードに対して ICustomTypeDescriptor の GetProperties() メソッドから一連の PropertyDescriptor を読み取りました。記録。
完全に時間の無駄!!!!