16

カスタム属性があります

[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class CustomDesignerAttribute: Attribute

次に、この属性で装飾された基本クラスがあります

[CustomDesigner(someKey, someValue)]
public class BaseClass

次に、同じ属性で装飾された、このクラスから派生したクラスがあります(同じキー、異なる値を持つ)

[CustomDesigner(someKey, someOtherValue)]
public class ChildClass : BaseClass

ChildClass が属性の複製を作成せず、代わりに既存のキーの値を上書きする (親属性全体を上書きする) 可能性はありますか? そうでない場合、ChildClass が独自に定義していない場合に BaseClass からデフォルト値を取得するための最良のパターンは何ですか?

4

3 に答える 3

8

いいえ、既存の属性をオーバーライドすることはできません。

属性は、オブジェクト (アセンブリ、クラス、メソッド、変数など) に添付されたメタデータであるため、常にこの接続を維持します。

基本クラスでデフォルトの「動作」を指定し、いくつかの派生クラスでそれをオーバーライドする場合は、返されるすべての属性をチェックしてGetCustomAttributes()、最も派生したもの (リストの最初のもの) のみを使用する必要があります。

于 2012-05-28T15:43:16.283 に答える
2

[AttributeUsage(Inherited=false)]属性が派生クラスに継承されないようにするために使用します。

于 2012-05-28T15:53:49.567 に答える