メソッドの値を返す方法と、メソッドの値を返す方法の違いは、ReadOnlyAttribute
に関連付けられていますか?ReadOnlyAttributeとPropertyDescriptor.IsReadOnly()
5
A
答えて
5
主な違いは、これはあなたが(ICustomTypeDescriptor
、TypeDescriptionProvider
またはTypeConverter
経由で)独自のPropertyDescriptor
実装を提供する場合は、より多くの制御をつかむことを可能にするということです。次に、アクセス権に基づいて書込可能な場合には自身の論理を選択することができます。
はい。既定の実装では、セッターなしのプロパティとReadOnlyAttribute
とマークされたプロパティの読み取り専用を報告します。
3
反射板を使用して見ると違いはありません。
派生クラスSimplePropertyDescriptorの1つに次のコードがあります。
public override bool IsReadOnly
{
get
{
return this.Attributes.Contains(ReadOnlyAttribute.Yes);
}
}
0
ちょっとメモ。
各エンティティの読み取り専用状態を個別に制御するために、アプリケーション内のエンティティオブジェクトにICustomTypeDescriptorを実装する日を費やしました。
したがって、それぞれのPropertyDescriptorの実装は、それがどこから来たエンティティオブジェクトへの参照を保持するので、IsReadOnlyプロパティは、このようなものだった:
public override bool IsReadOnly
{
get { return _owner.IsReadOnly;}
}
しかし、私は、コードを実行したとき、のBindingSourceコンポーネントは、一連のを読んでPropertyDescriptorは、セットの各レコードのICustomTypeDescriptorのGetProperties()メソッドから取得しましたが、IsReadOnlyの値をチェックすると、最初のレコードから取得したPropertyDescriptorのみがテストされました。
時間の無駄遣い!!!!
関連する問題
私は自分のPropertyDescriptorをICustomTypeDescriptorで作成していますが、IsReadOnly()メソッドは既にReadOnly属性が適用されているものを上書きします。 –
それは正しいです。 –