1

「仮想」メソッドにのみ適用できるように「カスタム属性」を作成するにはどうすればよいですか?

ここで問題ないはずです:

[OnlyOnVirtual]
public virtual void VirtualMethod()
{
    //do something
}

ここで、コンパイル エラーまたは実行エラーを発生させたいと思います。

[OnlyOnVirtual]
public void NonVirtualMethod()
{
    //do something
}

そのような制限のある「カスタム属性」を作成することは可能ですか?

4

4 に答える 4

4

いいえ。そのような制限はサポートされていません。

于 2012-07-27T23:16:31.037 に答える
2

You can't cause a compilation error for this usage, but you can throw a runtime exception in whatever code you have that's consuming the attributed methods. This is a very typical approach for cases where the usage requirements are more than the compiler can enforce. Note that you can't cause a general 'execution error' (outside your code that performs the reflection), as attributes are metadata and are only 'used' at runtime when code is reflecting over them.

于 2012-07-27T23:43:43.923 に答える
0

AttributeTargets属性を適用できるタイプについては、列挙型を参照してください。

例:

 [AttributeUsage(AttributeTargets.Class)]
    public class MyAttribute : Attribute
    {

    }
于 2012-07-27T23:29:26.203 に答える
0

以下の投稿で言及されているように、コンパイラにこれをコンパイル ステップとして強制的にチェックさせることはできませんが、アプリケーションの起動時に実行時にチェックすることができます。属性を適用したすべてのメソッドが仮想であることを確認するだけです。

C# メソッド属性は、abstract または static などの要件を強制しますか?

于 2015-03-19T15:09:48.120 に答える