Leggi in inglese

Condividi tramite


IConvertible Interfaccia

Definizione

Importante

Questa API non è conforme a CLS.

Definisce i metodi che convertono il valore del tipo di valore o di riferimento di implementazione in un tipo Common Language Runtime con un valore equivalente.

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

Esempio

Nell'esempio di codice seguente viene illustrata un'implementazione di IConvertible per una classe Numero complesso, che consente di eseguirne il cast prima come e Double quindi di chiamare i membri statici Convert in tale Doubleclasse .

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;
            }
        }
    }
}

Commenti

Questa interfaccia fornisce metodi per convertire il valore di un'istanza di un tipo di implementazione in un tipo Common Language Runtime con un valore equivalente. I tipi Common Language Runtime sono Boolean, , ByteSByteInt16, , UInt16, Int32Int64SingleUInt64UInt32DecimalDateTimeDoubleChare .String

Se non è presente alcuna conversione significativa in un tipo Common Language Runtime, un'implementazione del metodo di interfaccia specifica genera InvalidCastException. Ad esempio, se questa interfaccia viene implementata in un tipo booleano, l'implementazione del ToDateTime metodo genera un'eccezione perché non esiste un equivalente significativo DateTime a un tipo booleano.

Common Language Runtime espone in genere l'interfaccia IConvertible tramite la Convert classe . Common Language Runtime usa anche l'interfaccia IConvertible internamente, nelle implementazioni esplicite dell'interfaccia, per semplificare il codice usato per supportare le conversioni nella classe e nei Convert tipi Common Language Runtime di base.

Oltre all'interfacciaIConvertible, il .NET Framework fornisce classi denominate convertitori di tipi per convertire i tipi di dati definiti dall'utente in altri tipi di dati. Per altre informazioni, vedere l'argomento Conversione dei tipi generalizzati .

Note per gli implementatori

Se si implementa l'interfaccia , l'implementazione IConvertible ChangeType(Object, Type) verrà chiamata automaticamente dal metodo se il Object parametro è un'istanza del tipo di implementazione e il Type parametro è un tipo Common Language Runtime.

La maggior parte dei metodi di conversione ha un parametro di tipo IFormatProvider che rappresenta le impostazioni cultura correnti (CurrentCulture) o impostazioni cultura specifiche. Nella maggior parte dei casi, le IConvertible implementazioni dei tipi di base ignorano questo parametro. Tuttavia, è possibile scegliere se usarlo nel codice.

Metodi

GetTypeCode()

Restituisce l'oggetto TypeCode per questa istanza.

ToBoolean(IFormatProvider)

Converte il valore di questa istanza in un valore Boolean equivalente mediante le informazioni di formattazione specifiche delle impostazioni cultura.

ToByte(IFormatProvider)

Converte il valore di questa istanza in un valore intero senza segno a 8 bit equivalente mediante le informazioni di formattazione specifiche delle impostazioni cultura.

ToChar(IFormatProvider)

Converte il valore di questa istanza in un carattere Unicode equivalente mediante le informazioni di formattazione specifiche delle impostazioni cultura.

ToDateTime(IFormatProvider)

Converte il valore di questa istanza in un oggetto DateTime equivalente mediante le informazioni di formattazione specifiche delle impostazioni cultura.

ToDecimal(IFormatProvider)

Converte il valore di questa istanza in un numero Decimal equivalente mediante le informazioni di formattazione specifiche delle impostazioni cultura.

ToDouble(IFormatProvider)

Converte il valore di questa istanza in un numero in virgola mobile e precisione doppia mediante le informazioni di formattazione specifiche delle impostazioni cultura.

ToInt16(IFormatProvider)

Converte il valore di questa istanza in un valore intero con segno a 16 bit equivalente mediante le informazioni di formattazione specifiche delle impostazioni cultura.

ToInt32(IFormatProvider)

Converte il valore dell'istanza in un intero con segno a 32 bit equivalente mediante le informazioni di formattazione specifiche delle impostazioni cultura.

ToInt64(IFormatProvider)

Converte il valore dell'istanza in un intero con segno a 64 bit equivalente mediante le informazioni di formattazione specifiche delle impostazioni cultura.

ToSByte(IFormatProvider)

Converte il valore dell'istanza in un intero con segno a 8 bit equivalente mediante le informazioni di formattazione specifiche delle impostazioni cultura.

ToSingle(IFormatProvider)

Converte il valore di questa istanza in un numero in virgola mobile e precisione singola mediante le informazioni di formattazione specifiche delle impostazioni cultura.

ToString(IFormatProvider)

Converte il valore di questa istanza in un oggetto String equivalente mediante le informazioni di formattazione specifiche delle impostazioni cultura.

ToType(Type, IFormatProvider)

Converte il valore di questa istanza in un oggetto Object con attributo Type specificato dal valore equivalente, mediante le informazioni di formattazione specifiche delle impostazioni cultura.

ToUInt16(IFormatProvider)

Converte il valore dell'istanza in un intero senza segno a 16 bit equivalente mediante le informazioni di formattazione specifiche delle impostazioni cultura.

ToUInt32(IFormatProvider)

Converte il valore dell'istanza in un intero senza segno a 32 bit equivalente mediante le informazioni di formattazione specifiche delle impostazioni cultura.

ToUInt64(IFormatProvider)

Converte il valore dell'istanza in un intero senza segno a 64 bit equivalente mediante le informazioni di formattazione specifiche delle impostazioni cultura.

Si applica a

Prodotto Versioni
.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

Vedi anche