@Ian G: He compilado la lista de ECMA 335 y descubierto que puedo usar
List<MethodInfo> mis =
myObject.GetType().GetMethods().Where((MethodInfo mi) =>
{
mi.GetCustomAttributes(typeof(MyAttribute), true).Length > 0;
}
).ToList();
foreach(MethodInfo mi in mis)
{
List<Instruction> lst = ReflectionHelper.ReadIL(mi);
... find useful opcode
FieldInfo fi = mi.Module.ResolveField((int)usefulOpcode.Argument);
object o = fi.GetValue(myObject);
...
}
Y la lista longitud de código de operación es aquí, si alguien lo necesita:
Dictionary<OperandType, int> operandSizes
= new Dictionary<OperandType, int>()
{
{OperandType.InlineBrTarget, 4},
{OperandType.InlineField, 4},
{OperandType.InlineI, 4},
{OperandType.InlineI8,8},
{OperandType.InlineMethod,4},
{OperandType.InlineNone,0},
{OperandType.InlineR,8},
{OperandType.InlineSig,4},
{OperandType.InlineString,4},
{OperandType.InlineSwitch,4},
{OperandType.InlineTok,4},
{OperandType.InlineType,4},
{OperandType.InlineVar,2},
{OperandType.ShortInlineBrTarget,1},
{OperandType.ShortInlineI,1},
{OperandType.ShortInlineR,4},
{OperandType.ShortInlineVar,1}
};
No entiendo lo que está tratando de hacer. ¿Por qué necesitas reflexión? Con "variables de clase", ¿te refieres a campos? Puede obtener fácilmente la instancia actual de un determinado campo, pero no los argumentos del constructor que se utilizan para crearlo. ¿Por qué necesitas esto? –
Por variables de clase me refiero a campos con ámbito de clase que son clases. Estoy pensando en declarar un atributo para algunos métodos que necesita cosas especiales que se hagan de acuerdo con las variables que utiliza desde su clase principal. La instancia actual de un determinado campo puede funcionar para mí. – kerem