Ler em inglês

Compartilhar via


IConvertible Interface

Definição

Importante

Esta API não está em conformidade com CLS.

Define métodos que convertem o valor de referência de implementação ou tipo de valor em um tipo common language runtime de valor equivalente.

C#
[System.CLSCompliant(false)]
public interface IConvertible
C#
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(true)]
public interface IConvertible
Derivado
Atributos

Exemplos

O exemplo de código a seguir demonstra uma implementação de IConvertible uma classe numérica Complexa, permitindo que ela seja lançada primeiro como um Double e, em seguida, chamando os membros estáticos Convert sobre isso Double.

C#
using System;

namespace ConsoleApplication2
{

    /// Class that implements IConvertible
    class Complex : IConvertible
    {
        double	x;
        double	y;

        public Complex(double x, double y)
        {
            this.x = x;
            this.y = y;
        }

        public TypeCode GetTypeCode()
        {
            return TypeCode.Object;
        }

        bool IConvertible.ToBoolean(IFormatProvider provider)
        {
            if(	(x != 0.0) || (y != 0.0) )
                return true;
            else
                return false;
        }

        double GetDoubleValue()
        {
            return Math.Sqrt(x*x + y*y);
        }

        byte IConvertible.ToByte(IFormatProvider provider)
        {
            return Convert.ToByte(GetDoubleValue());
        }

        char IConvertible.ToChar(IFormatProvider provider)
        {
            return Convert.ToChar(GetDoubleValue());
        }

        DateTime IConvertible.ToDateTime(IFormatProvider provider)
        {
            return Convert.ToDateTime(GetDoubleValue());
        }

        decimal IConvertible.ToDecimal(IFormatProvider provider)
        {
            return Convert.ToDecimal(GetDoubleValue());
        }

        double IConvertible.ToDouble(IFormatProvider provider)
        {
            return GetDoubleValue();
        }

        short IConvertible.ToInt16(IFormatProvider provider)
        {
            return Convert.ToInt16(GetDoubleValue());
        }

        int IConvertible.ToInt32(IFormatProvider provider)
        {
            return Convert.ToInt32(GetDoubleValue());
        }

        long IConvertible.ToInt64(IFormatProvider provider)
        {
            return Convert.ToInt64(GetDoubleValue());
        }

        sbyte IConvertible.ToSByte(IFormatProvider provider)
        {
            return Convert.ToSByte(GetDoubleValue());
        }

        float IConvertible.ToSingle(IFormatProvider provider)
        {
            return Convert.ToSingle(GetDoubleValue());
        }

        string IConvertible.ToString(IFormatProvider provider)
        {
            return String.Format("({0}, {1})", x, y);
        }

        object IConvertible.ToType(Type conversionType, IFormatProvider provider)
        {
            return Convert.ChangeType(GetDoubleValue(),conversionType);
        }

        ushort IConvertible.ToUInt16(IFormatProvider provider)
        {
            return Convert.ToUInt16(GetDoubleValue());
        }

        uint IConvertible.ToUInt32(IFormatProvider provider)
        {
            return Convert.ToUInt32(GetDoubleValue());
        }

        ulong IConvertible.ToUInt64(IFormatProvider provider)
        {
            return Convert.ToUInt64(GetDoubleValue());
        }
    }

    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {

            Complex		testComplex = new Complex(4,7);

            WriteObjectInfo(testComplex);
            WriteObjectInfo(Convert.ToBoolean(testComplex));
            WriteObjectInfo(Convert.ToDecimal(testComplex));
            WriteObjectInfo(Convert.ToString(testComplex));
        }

        static void WriteObjectInfo(object testObject)
        {
            TypeCode	typeCode = Type.GetTypeCode( testObject.GetType() );

            switch( typeCode )
            {
                case TypeCode.Boolean:
                    Console.WriteLine("Boolean: {0}", testObject);
                    break;

                case TypeCode.Double:
                    Console.WriteLine("Double: {0}", testObject);
                    break;
                                
                default:
                    Console.WriteLine("{0}: {1}", typeCode.ToString(), testObject);
                    break;
            }
        }
    }
}

Comentários

Essa interface fornece métodos para converter o valor de uma instância de um tipo de implementação em um tipo de common language runtime que tenha um valor equivalente. Os tipos de common language runtime sãoBoolean, SByte, , Int16Byte, UInt16, Int32, UInt32, , Int64, UInt64, Single, Double, , , Decimal, DateTime, , Chare String.

Se não houver nenhuma conversão significativa em um tipo de common language runtime, uma implementação de método de interface específica será lançada InvalidCastException. Por exemplo, se essa interface for implementada em um tipo booliano, a implementação do ToDateTime método gerará uma exceção porque não há nenhum equivalente significativo DateTime a um tipo booliano.

O common language runtime normalmente expõe a IConvertible interface por meio da Convert classe. O common language runtime também usa a IConvertible interface internamente, em implementações explícitas de interface, para simplificar o código usado para dar suporte a Convert conversões nos tipos de runtime de linguagem comum básicos e de classe.

Além da IConvertible interface, o .NET Framework fornece classes chamadas conversores de tipo para converter tipos de dados definidos pelo usuário em outros tipos de dados. Para obter mais informações, consulte o tópico Conversão de Tipo Generalizado .

Notas aos Implementadores

Se você implementar a IConvertible interface, sua implementação será chamada automaticamente pelo ChangeType(Object, Type) método se o Object parâmetro for uma instância do seu tipo de implementação e o Type parâmetro for um tipo de common language runtime.

A maioria dos métodos de conversão tem um parâmetro de tipo IFormatProvider que representa a cultura atual (CurrentCulture) ou uma cultura específica. Na maioria das vezes, as IConvertible implementações dos tipos base ignoram esse parâmetro. No entanto, você pode escolher se deseja usá-lo em seu código.

Métodos

GetTypeCode()

Retorna o TypeCode para essa instância.

ToBoolean(IFormatProvider)

Converte o valor dessa instância em um valor booliano equivalente usando as informações de formatação específicas da cultura especificadas.

ToByte(IFormatProvider)

Converte o valor dessa instância em um inteiro sem sinal de 8 bits equivalente usando as informações de formatação específicas da cultura especificadas.

ToChar(IFormatProvider)

Converte o valor dessa instância em um caractere Unicode equivalente usando as informações de formatação específicas da cultura especificadas.

ToDateTime(IFormatProvider)

Converte o valor dessa instância em um DateTime equivalente usando as informações de formatação específicas da cultura especificadas.

ToDecimal(IFormatProvider)

Converte o valor dessa instância em um número Decimal equivalente usando as informações de formatação específicas da cultura especificadas.

ToDouble(IFormatProvider)

Converte o valor dessa instância em um número de ponto flutuante de precisão dupla equivalente usando as informações de formatação específicas à cultura especificada.

ToInt16(IFormatProvider)

Converte o valor dessa instância em um inteiro com sinal de 16 bits equivalente usando as informações de formatação específicas da cultura especificadas.

ToInt32(IFormatProvider)

Converte o valor dessa instância em um inteiro com sinal de 32 bits equivalente usando as informações de formatação específicas da cultura especificadas.

ToInt64(IFormatProvider)

Converte o valor dessa instância em um inteiro com sinal de 64 bits equivalente usando as informações de formatação específicas da cultura especificadas.

ToSByte(IFormatProvider)

Converte o valor dessa instância em um inteiro com sinal de 8 bits equivalente usando as informações de formatação específicas da cultura especificadas.

ToSingle(IFormatProvider)

Converte o valor dessa instância especificada em um número de ponto flutuante de precisão simples equivalente usando as informações de formatação específicas à cultura especificadas.

ToString(IFormatProvider)

Converte o valor dessa instância em um String equivalente usando as informações de formatação específicas da cultura especificadas.

ToType(Type, IFormatProvider)

Converte o valor dessa instância em um Object do Type especificado que tem um valor equivalente, usando as informações de formatação específicas da cultura especificadas.

ToUInt16(IFormatProvider)

Converte o valor dessa instância em um inteiro sem sinal de 16 bits equivalente usando as informações de formatação específicas da cultura especificadas.

ToUInt32(IFormatProvider)

Converte o valor dessa instância em um inteiro sem sinal de 32 bits equivalente usando as informações de formatação específicas da cultura especificadas.

ToUInt64(IFormatProvider)

Converte o valor dessa instância em um inteiro sem sinal de 64 bits equivalente usando as informações de formatação específicas da cultura especificadas.

Aplica-se a

Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Confira também