1

カスタム (PostSharp) 属性に制約を定義したいと思います。私の目標は、クラスXがYインターフェイスを実装していないが、それが私の属性を持っている場合、コンパイル時にエラーまたは警告を取得することです。

したがって、これは機能するはずです:

[MyAttributeOnlyForY]
public class X : Y { ... }

しかし、これはコンパイルプロセスを壊すはずです:

[MyAttributeOnlyForY]
public class X { ... }

それはどのように可能ですか?

理由

この属性はアスペクトのように機能し (これは PostSharp属性です)、織り込まれたクラスがこの属性に必要なすべての情報を提供することを確認したいと思います。

nullの結果を避けたい

(eventArgs.Instance as ILoggerServiceOwner)

コンプライアンス時間のチェックは良い習慣だと思います。

解決

私はここで完璧なスタートを見つけました: Validating attribute usage with PostSharp Aspects

4

2 に答える 2

1

PostSharp メソッド CompileTimeValidate を使用し、リフレクションを使用して、型に派生型があるかどうかを確認できます。ただし、アセンブリ内のすべての型を検索すると、計算コストが高くなる場合があります。

于 2010-02-10T08:46:40.137 に答える
1

これは不可能だと思います。より良い解決策は、カスタム属性コンストラクターで Obsolete 属性を使用して、ターゲット クラスがインターフェイス Y を実装する必要があることを警告することです。

于 2010-02-09T22:50:11.480 に答える