C# には という属性がありますAttributeUsage
。この属性をクラスに設定する場合、クラスが Attribute クラスから派生したものであるかどうかが自動的に検出され、そうでない場合はエラーがスローされます。
どうすればそのような制限を作成できますか?
特定のクラスでのみ使用可能/設定可能にする属性を作成したいと考えています。
C# には という属性がありますAttributeUsage
。この属性をクラスに設定する場合、クラスが Attribute クラスから派生したものであるかどうかが自動的に検出され、そうでない場合はエラーがスローされます。
どうすればそのような制限を作成できますか?
特定のクラスでのみ使用可能/設定可能にする属性を作成したいと考えています。
あなたがしようとしていることは、属性AttributeUsage
だけでは不可能ですが、他の方法で達成できます。
AttributeUsage
ValidOn
タイプのプロパティを持っていますAttributeTarget
。class
このクラスの型ではなく、 でのみ有効であることを指定できます。
では、なぜAttributeUsage
から派生したクラスでしか機能しないのAttribute
でしょうか? これはコンパイラ ルールCS0641 です。
'attribute' : 属性は System.Attribute から派生したクラスでのみ有効です
System.Attributeから派生したクラスでのみ使用できる属性が使用されました。
それ自体の一部ではありませんAttributeUsage
。
このようなことを達成したい場合は、それをチェックする独自の Roslyn アナライザーを作成する必要があります。1つを作成する方法に関するチュートリアルはほとんどありません。つまり、公式のものまたはこれです)、コードを確認することもお勧めします。roslyn-analyzers
コードCS0641
はありません。これはコンパイラエラーであり、アナライザーではありませんが、ここでかなり多くの参照を取得できます.
お役に立てば幸いです。幸運を祈ります。