c # O uso de métodos de extensão

Em termos leigos, o método de extensão é adicionar um ou mais métodos a esses tipos, como String, Int, DateTime, DataRow, DataTable, etc., sem a necessidade de modificar ou compilar o código do próprio tipo.

 

Exemplo 1: formato e exibir variáveis ​​de tipo de tempo

Escrita convencional:

DateTime agora = DateTime.Now;
string time = now.ToString ("aaaa-mm-dd hh: mm: ss");

Método de extensão:

Defina um método de extensão

using System;

namespace DB.MySql
{
    public static class ExtHelper
    {
        /// <summary>
        /// 日期格式化
        /// </summary>
        public static string DateToString(this DateTime dt)
        {
            return dt.ToString("yyyy-mm-dd hh:mm:ss");
        }
    }
}

O código acima indica que um método de extensão é definido para o tipo DateTime e o nome do método é DateToString.

Quando você quiser formatar uma variável do tipo de hora no projeto, digite "agora" e você pode ver que há um método DateToString () que é solicitado automaticamente, que pode ser chamado diretamente como o método de instância do tipo de data em si, o que é muito conveniente.

 

Exemplo 2: converter uma string em um número

Escrita convencional:

        /// <summary>
        /// 字符串转数字
        /// </summary>
        public static int StrToInt(string s)
        {
            int id;
            int.TryParse(s, out id);//这里当转换失败时返回的id为0
            return id;
        }

transferir:

string s = "2";
int i = StrToInt (s);

 

 Método de extensão:

        /// <summary>
        /// 将字符串转换为Int
        /// </summary>
        /// <param name="t"></param>
        /// <returns>当转换失败时返回0</returns>
        public static int StrToInt(this string t)
        {
            int id;
            int.TryParse(t, out id);//这里当转换失败时返回的id为0
            return id;
        }

transferir:

string s = "2";
int i = s.StrToInt ();

 

Exemplo 3: Determine se uma data está dentro do intervalo de duas datas (método de expansão com parâmetros)

Método de extensão:

        /// <summary>
        /// 此时间是否在此范围内
        /// </summary>
        /// <param name="t"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public static bool IsRange(this DateTime t, DateTime startTime, DateTime endTime)
        {
            if ((startTime - t).TotalSeconds > 0)
            {
                return false;
            }

            if ((endTime - t).TotalSeconds < 0)
            {
                return false;
            }

            return true;
        }

Chamada: Determine se t1 está dentro do intervalo de tempo de dtStart e dtEnd

DateTime t1 = DateTime.Now;
DateTime dtStart = DateTime.Now.AddDays (-1);
DateTime dtEnd = DateTime.Now.AddDays (1);
bool b = t1.IsRange (dtStart, dtEnd);

 

A partir dos três exemplos simples acima, podemos ver que o método de extensão é muito prático no desenvolvimento real. Aqui está um resumo do método de extensão:

Elementos do método de extensão:

1. Este método deve ser um método estático (método usa modificação estática)
2. Este método deve ser colocado em uma classe estática (classe usa modificação estática)
3. O primeiro parâmetro deste método deve começar com este, e especificar que este método é de qual tipo estender (DateTime, string, etc.)

Características do método de extensão:

1. A partir de qual tipo o método de extensão é estendido, deve ser uma variável deste tipo. Outros tipos não podem ser usados. Uma instância de uma extensão do tipo DateTime só pode ser uma variável do tipo DateTime. Out ()
2. No método de extensão O parâmetro após este não pertence ao parâmetro do método. Os exemplos 1 e 2 são métodos de extensão sem parâmetros. O DateTime dt após este exemplo indica que o método de extensão se estende do tipo de data. A instância três é um método de extensão parametrizado, startTime e endTime são dois parâmetros reais
. 3. Se o método de extensão e o método de instância tiverem a mesma assinatura, o método de instância será chamado primeiro
. 4. O método estendido da classe pai pode ser usado diretamente pelo objeto da subclasse Uso
5. Métodos de extensão na interface, que podem ser usados ​​diretamente pelos objetos da classe de implementação
6. O método de extensão é finalmente compilado pelo compilador em: classe estática Método estático () , neste caso now.DateToString () eventualmente será Compile into DateHelper.DateToString (now), esta é a sua essência

 

Acho que você gosta

Origin blog.csdn.net/liangmengbk/article/details/112393864
Recomendado
Clasificación