- Obtando o valer de uma propriedade de um objeto a partir do nome do campo
/// <summary>
/// Obtém o valor de uma propriedade de um objeto usando o nome do campo
/// </summary>
/// <param name="nomeCampo">Nome do campo/propriedade</param>
/// <param name="instancia">Instância do objeto</param>
/// <returns>Valor da propriedade como string</returns>
public string ObterValorPropriedade(string nomeCampo, object instancia)
{
try
{
Type tipo = instancia.GetType();
object valor = tipo.GetProperty(nomeCampo).GetValue(instancia, null);
string resultado = Convert.ToString(valor);
if (string.IsNullOrEmpty(resultado)) return null;
return resultado;
}
catch
{
return null;
}
}
Exemplo de utilização
//Com base no valor do input, verificar se há entrada na porta IO
//if (this.txt_input.Text == "6")//sem reflexão, seria necessário escrever muito código
//{
// if (Global.myAdam6250.DI_6 == "True")
// {
// Flag_Tighten_Done = true;
// }
//}
string nomePropriedade = "DI_" + this.txt_input.Text;
string valorEntrada = ObterValorPropriedade(nomePropriedade, Global.myAdam6250);
if (valorEntrada == "True")
{
Flag_Tighten_Done = true;
if ( flagSaidaConfigurada == true )
{
InvocarMetodo(formMonitor, nomeMetodo, null);
flagSaidaConfigurada = false;
}
}
- Invocendo um método de um objeto a partir do nome do método
/// <summary>
/// Invoca um método de um objeto específico pelo nome
/// </summary>
/// <param name="objeto">Instância do objeto contendo o método</param>
/// <param name="nomeMetodo">Nome do método a ser invocado</param>
/// <param name="parametros">Parâmetros a serem passados (opcional)</param>
public void InvocarMetodo(object objeto, string nomeMetodo, object[] parametros = null)
{
try
{
Type tipo = objeto.GetType();
//Obtém os métodos públicos do objeto
MethodInfo infoMetodo = tipo.GetMethod(nomeMetodo);
//Executa o método
infoMetodo.Invoke(objeto, parametros);
}
catch (Exception)
{
throw;
}
}
Exemplo de utilização:
//Enviar sinal para saída IO, ligar indicador de peça coletada
string nomeMetodo = "SetOut_" + this.txt_output.Text;
if (StringHelper.IsInteger(this.txt_output.Text))
{
if ( flagSaidaConfigurada == false )
{
InvocarMetodo(formMonitor, nomeMetodo, null);
flagSaidaConfigurada = true;
}
}