情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

EventAttributes 列挙体

2013/12/12

イベントの属性を指定します。

この列挙体には、メンバー値のビットごとの組み合わせを可能にする FlagsAttribute 属性が含まれています。

Namespace:  System.Reflection
アセンブリ:  mscorlib (mscorlib.dll 内)

[FlagsAttribute]
public enum EventAttributes

メンバー名説明
Noneイベントに属性がないことを指定します。
ReservedMask共通言語ランタイム専用として予約済みのフラグを指定します。
RTSpecialName共通言語ランタイムが名前のエンコード方式をチェックする必要があることを指定します。
SpecialNameイベントが特殊であることを、名前で示すという方法で指定します。

ビットごとの OR 演算を使用して複数の EventAttributes 値を組み合わせ、属性の適切な組み合わせを取得できます。

リフレクション出力を使用して 2 つのイベントを持つ型を作成する例を次に示します。この例では、EventAttributes.None を使用して、イベントに属性が含まれないように指定します。

メモメモ:

この例を実行するには、「Windows Phone での静的 TextBlock コントロールのあるコード例のビルド」を参照してください。


using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;


public class Example
{
   public delegate void MyEvent(Object temp);
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      TypeBuilder helloWorldClass = CreateCallee(Thread.GetDomain());

      EventInfo[] info =
         helloWorldClass.GetEvents(BindingFlags.Public | BindingFlags.Instance);
      outputBlock.Text += "'HelloWorld' type has following events :" + "\n";
      for (int i = 0; i < info.Length; i++)
         outputBlock.Text += info[i].Name + "\n";
   }

   // Create the callee transient dynamic assembly.
   private static TypeBuilder CreateCallee(AppDomain myDomain)
   {
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "EmittedAssembly";

      // Create the callee dynamic assembly.
      AssemblyBuilder myAssembly =
         myDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      // Create a dynamic module named "CalleeModule" in the callee.
      ModuleBuilder myModule = myAssembly.DefineDynamicModule("EmittedModule");

      // Define a public class named "HelloWorld" in the assembly.
      TypeBuilder helloWorldClass =
         myModule.DefineType("HelloWorld", TypeAttributes.Public);

      MethodBuilder myMethod1 = helloWorldClass.DefineMethod("OnClick",
         MethodAttributes.Public, typeof(void), new Type[] { typeof(Object) });
      ILGenerator methodIL1 = myMethod1.GetILGenerator();
      methodIL1.Emit(OpCodes.Ret);
      MethodBuilder myMethod2 = helloWorldClass.DefineMethod("OnMouseUp",
         MethodAttributes.Public, typeof(void), new Type[] { typeof(Object) });
      ILGenerator methodIL2 = myMethod2.GetILGenerator();
      methodIL2.Emit(OpCodes.Ret);

      // Create the events.
      EventBuilder myEvent1 = helloWorldClass.DefineEvent("Click", EventAttributes.None,
         typeof(MyEvent));
      myEvent1.SetRaiseMethod(myMethod1);
      EventBuilder myEvent2 = helloWorldClass.DefineEvent("MouseUp", EventAttributes.None,
         typeof(MyEvent));
      myEvent2.SetRaiseMethod(myMethod2);

      helloWorldClass.CreateType();
      return (helloWorldClass);
   }
}


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: