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