ええと、あなたが求めているのは、必ずしもアスペクト指向プログラミングとは関係ありません。むしろAOPフレームワークでは、いわゆる「ポイントカット」をマークする属性を使用することがあります。 「アドバイス」が適用される場所(つまり、タイプが変更される場所)。
通常、クラスの動作を変更するのは属性そのものではありません。彼らは他の何かによって特別な扱いのための型だけを「マーク」します。他のフレームワーク、ライブラリ、バイトコードリライタなどによって、または単に.NET自体によって。
彼らは.NETの実行環境によって異なる方法で処理される任意の追加のツール—のためにも必要としないタイプを「変更」.NETのintrinsical一部であるいくつかの特別な属性があります。 MarshalByRefObjectAttribute
のいずれかである可能性があります。 SerializableAttribute
は、シリアル化を扱う.NET BCLの重要な要素です。
Visual Studio用のWindowsフォームデザイナは、特定の属性のために外を見て
- 、などなど
Browsable
、Description
、
WCFは、属性のために外を見て、のようなOperationContract
、DataContract
、
として
ここで理解しなければならない主なポイントは、誰か(たとえそれが.NETであっても)が属性の有無を積極的にチェックし、何かをしなければならないということです。彼ら自身は何もしません!それらは単に他のものに注釈を付けられたデータです。
オブジェクトを取る独自のコンポーネントを記述し、そのオブジェクトの型に定義されている属性があるかどうかを調べることができます(もしそうであれば、別の方法で処理します)。これは、リフレクションを介して行うことができます。
using System.Linq;
using System.Reflection;
…
public class SomeAttribute : Attribute { … }
void DoSomethingWith<T>(T someObject) // (T is only introduced here for
{ // easy reference in the comments below.)
object[] attribute =
someObject.GetType().GetCustomAttributes(typeof(SomeAttribute), true);
if (attribute.Any())
{
// [SomeAttribute] is present on type T, or T inherits the attribute.
}
else
{
// [SomeAttribute] is not present on T.
}
}
もMSDNのドキュメントを参照してください:System.Type.GetCustomAttributes