por Cesar Cassiano Schimanco

Estender classes, criar métodos de extensão (ex: double.ToMoney(), string.ToInt()...)

Neste artigo vou mostrar como podemos criar novos métodos para classes já existentes.
Veja o exemplo abaixo:

int id = Request.QueryString["id"].ToInt();

O método ToInt() não existe na classe System.String, bem como o ToMoney(), no exemplo abaixo, não existe na classe System.Double.

double d = 10.5;
Response.Write(d.ToMoney());

Para que estes métodos existam nas respectivas classes, vamos criar uma classe de extensões.
Abaixo dois exemplos de extensões de classes, o primeiro estende a classe System.String, que passará a ter um novo método, o ToInt().
No segundo, vamos estender a classe System.Double, que passará a ter o método ToMoney().

/App_Code/Extend.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Globalization;

//Esta classe deve ser "public static".
public static class Extend
{
    #region ToInt
    //Criando o método "public static" para converter para int.
    //Usamos "this" para que passe seu valor como parametro.
    public static int ToInt(this string input)
    {
        //Valor default
        int _int = 0; 
        //Usando o TryParse, caso seja um número válido
        //_int = input, se não, _int = 0
        //Ou seja, este método sempre retornará um inteiro
        int.TryParse(input, out _int);
        return _int;
    }
    #endregion

    #region ToMoney
    //Criando o método "public static" para converter para moeda (string).
    //Usamos "this" para que passe seu valor como parametro.
    public static string ToMoney(this double input)
    {
        //Usando Globalization para converter para Reais
        return input.ToString("C", new CultureInfo("pt-BR"));
    } 
    #endregion
}

Este é um exemplo simples, apenas para entendimento.
Mas a partir disso, podemos criar muitas extensões que podem facilitar e agilizar o processo de desenvolvimento.

Comentários

Carregando comentários

Postar um novo comentário



Processando...