1

C# には という属性がありますAttributeUsage。この属性をクラスに設定する場合、クラスが Attribute クラスから派生したものであるかどうかが自動的に検出され、そうでない場合はエラーがスローされます。

どうすればそのような制限を作成できますか?

特定のクラスでのみ使用可能/設定可能にする属性を作成したいと考えています。

4

1 に答える 1

1

あなたがしようとしていることは、属性AttributeUsageだけでは不可能ですが、他の方法で達成できます。

AttributeUsageValidOnタイプのプロパティを持っていますAttributeTargetclassこのクラスの型ではなく、 でのみ有効であることを指定できます。

では、なぜAttributeUsageから派生したクラスでしか機能しないのAttributeでしょうか? これはコンパイラ ルールCS0641 です。

'attribute' : 属性は System.Attribute から派生したクラスでのみ有効です

System.Attributeから派生したクラスでのみ使用できる属性が使用されました。

それ自体の一部ではありませんAttributeUsage

このようなことを達成したい場合は、それをチェックする独自の Roslyn アナライザーを作成する必要があります。1つを作成する方法に関するチュートリアルはほとんどありません。つまり、公式のものまたはこれです)、コードを確認することもお勧めします。roslyn-analyzersコードCS0641はありません。これはコンパイラエラーであり、アナライザーではありませんが、ここでかなり多くの参照を取得できます.

お役に立てば幸いです。幸運を祈ります。

于 2019-11-18T08:09:49.147 に答える