私の小さなプロジェクトでは、System.Reflection
クラスを使用して実行可能コードを生成しています。+
カスタムタイプの演算子を呼び出す必要があります。C#リフレクションを使用してカスタムクラスのカスタマイズされた演算子を呼び出す方法を知っている人はいますか?
質問する
6724 次
3 に答える
42
op_XXXX
C# コンパイラは、オーバーロードされた演算子を、 が操作である名前の関数に変換しXXXX
ます。たとえば、operator +
としてコンパイルされop_Addition
ます。
オーバーロード可能な演算子とそれぞれのメソッド名の完全なリストは次のとおりです。
┌──────────────────────────┬───────────────────────┬──────────────────────────┐
│ Operator │ Method Name │ Description │
├──────────────────────────┼───────────────────────┼──────────────────────────┤
│ operator + │ op_UnaryPlus │ Unary │
│ operator - │ op_UnaryNegation │ Unary │
│ operator ++ │ op_Increment │ │
│ operator -- │ op_Decrement │ │
│ operator ! │ op_LogicalNot │ │
│ operator + │ op_Addition │ │
│ operator - │ op_Subtraction │ │
│ operator * │ op_Multiply │ │
│ operator / │ op_Division │ │
│ operator & │ op_BitwiseAnd │ │
│ operator | │ op_BitwiseOr │ │
│ operator ^ │ op_ExclusiveOr │ │
│ operator ~ │ op_OnesComplement │ │
│ operator == │ op_Equality │ │
│ operator != │ op_Inequality │ │
│ operator < │ op_LessThan │ │
│ operator > │ op_GreaterThan │ │
│ operator <= │ op_LessThanOrEqual │ │
│ operator >= │ op_GreaterThanOrEqual │ │
│ operator << │ op_LeftShift │ │
│ operator >> │ op_RightShift │ │
│ operator % │ op_Modulus │ │
│ implicit operator <type> │ op_Implicit │ Implicit type conversion │
│ explicit operator <type> │ op_Explicit │ Explicit type conversion │
│ operator true │ op_True │ │
│ operator false │ op_False │ │
└──────────────────────────┴───────────────────────┴──────────────────────────┘
したがってoperator+
、構造体のメソッドを取得するには、次のDateTime
ように記述する必要があります。
MethodInfo mi = typeof(DateTime).GetMethod("op_Addition",
BindingFlags.Static | BindingFlags.Public );
于 2012-06-20T05:43:13.800 に答える
7
typeof(A).GetMethod("op_Addition").Invoke(null, instance1, instance2);
于 2012-06-20T05:37:59.840 に答える
0
カスタマイズしたオペレーターを のようにすることを検討してproperty
くださいClass
。そして、property
とそのvalue
を介してアクセスしますreflection
。
お気に入り
PropertyInfo pinfo = obj.GetType().GetProperty("CustomOperator", BindingFlags.Public | BindingFlags.Instance);
string customOperator = pinfo.GetValue(obj,null) as string;
于 2012-06-20T05:32:49.690 に答える