6
My problem is this: I’m writing an interpreter and I need to perform dynamic operations between various types.
For this use dynamic links provided by DLR consisting of a static object encapsulated within a meta-dynamic object.
It happens that when reflecting on the public members of a Int32
(the same is true for other descendants of ValueType
) fields, properties, methods and constructors are successfully obtained, but arithmetic operators(op_xxx
) and their overloads do not appear as a result of reflection.
I’ve tried the function Type.GetMethods()
and the result is the same.
How do I get the MemberInfo
or MethodInfo
for arithmetic operators and overloaded operators?
PS: Members is a dictionary whose keys are string
and values are lists of MemberInfo
's.
// Nesse exemplo eu faço a reflexão sobre os membros públicos do tipo Int32 mas as operações não aparecem no dicionário.
int valor = 123; // Um valor arbitrário, o tipo que é interessante.
//Dicionário onde ficarão guardado os resultados da reflexão.
Dictionary<string, List<MemberInfo>> membros = new Dictionary<string,List<MemberInfo>>();
//Reflete os membros de value e preenche o dicionário members.
public Refletir()
{
//obtém o tipo Int32 para reflexão
Type tipo = valor.GetType();
//Itera sobre os membros do tipo em questão
foreach (var membro in tipo.GetMembers())
{
//Verifica se o dicionário já contém uma chave
//para o nome do membro.
if (membros.ContainsKey(membro.Name))
{
//Se já existir a chave adiciona o membro ao
//valor cujo é uma lista de MemberInfo's.
membros[membro.Name].Add(membro);
} else {
// Se a chave não existir é criada uma lista de
// MemberInfo's onde é adicionada o membro atual
// então a lista é adicionada ao dicionário de membros
List<MemberInfo> lista = new List<MemberInfo>();
lista.Add(membro);
membros.Add(membro.Name, lista );
}
}
Thanks for the help.
– Augusto Vasques