Auf Englisch lesen

Freigeben über


IConvertible Schnittstelle

Definition

Wichtig

Diese API ist nicht CLS-kompatibel.

Definiert Methoden, die den Wert der Implementierungsreferenz oder den Werttyp in einen Common Language Runtime-Typ konvertiert, der einen äquivalenten Wert aufweist.

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

Beispiele

Im folgenden Codebeispiel wird eine Implementierung IConvertible einer komplexen Zahlenklasse veranschaulicht, sodass sie zuerst als eine Double und dann die statischen Convert Member für diese DoubleKlasse eingefügt werden kann.

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

Hinweise

Diese Schnittstelle stellt Methoden bereit, um den Wert einer Instanz eines Implementierungstyps in einen gängigen Sprachlaufzeittyp zu konvertieren, der einen entsprechenden Wert aufweist. Die allgemeinen Sprachlaufzeittypen sind Boolean, SByte, ByteUInt16Int64UInt32UInt64SingleInt32Int16DecimalDateTimeDoubleCharund .String

Wenn keine sinnvolle Konvertierung in einen gängigen Sprachlaufzeittyp vorliegt, löst InvalidCastExceptioneine bestimmte Schnittstellenmethodenimplementierung aus. Wenn diese Schnittstelle beispielsweise auf einem booleschen Typ implementiert ist, löst die Implementierung der ToDateTime Methode eine Ausnahme aus, da kein aussagekräftiger DateTime Äquivalent zu einem booleschen Typ vorhanden ist.

Die allgemeine Sprachlaufzeit macht die Schnittstelle in der IConvertible Regel über die Convert Klasse verfügbar. Die allgemeine Sprachlaufzeit verwendet auch die IConvertible Schnittstelle intern in expliziten Schnittstellenimplementierungen, um den Code zu vereinfachen, der verwendet wird, um Konvertierungen in der Convert Klasse und grundlegende gängige Sprachlaufzeittypen zu unterstützen.

Zusätzlich zur IConvertible Schnittstelle stellt die .NET Framework Klassen namens Typkonverter zum Konvertieren benutzerdefinierter Datentypen in andere Datentypen bereit. Weitere Informationen finden Sie im Thema "Generalisierte Typkonvertierung" .

Hinweise für Ausführende

Wenn Sie die IConvertible Schnittstelle implementieren, wird Ihre Implementierung automatisch von der ChangeType(Object, Type) Methode aufgerufen, wenn der Object Parameter eine Instanz Ihres Implementierungstyps ist und der Type Parameter ein gängiger Sprachlaufzeittyp ist.

Die meisten Konvertierungsmethoden weisen einen Parameter vom Typ IFormatProvider auf, der entweder die aktuelle Kultur (CurrentCulture) oder eine bestimmte Kultur darstellt. In den meisten Fällen ignorieren die IConvertible Implementierungen der Basistypen diesen Parameter. Sie können jedoch auswählen, ob sie in Ihrem Code verwendet werden soll.

Methoden

GetTypeCode()

Gibt den TypeCode für diese Instanz zurück.

ToBoolean(IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in einen entsprechenden booleschen Wert.

ToByte(IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in eine entsprechende 8-Bit-Ganzzahl ohne Vorzeichen.

ToChar(IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in ein entsprechendes Unicode-Zeichen.

ToDateTime(IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in einen entsprechenden DateTime.

ToDecimal(IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in eine entsprechende Decimal-Zahl.

ToDouble(IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in eine entsprechende Gleitkommazahl mit doppelter Genauigkeit.

ToInt16(IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in eine entsprechende 16-Bit-Ganzzahl mit Vorzeichen.

ToInt32(IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in eine entsprechende 32-Bit-Ganzzahl mit Vorzeichen.

ToInt64(IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in eine entsprechende 64-Bit-Ganzzahl mit Vorzeichen.

ToSByte(IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in eine entsprechende 8-Bit-Ganzzahl mit Vorzeichen.

ToSingle(IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in eine entsprechende Gleitkommazahl mit einfacher Genauigkeit.

ToString(IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in einen entsprechenden String.

ToType(Type, IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in ein Object vom angegebenen Type mit einem entsprechenden Wert.

ToUInt16(IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in eine entsprechende 16-Bit-Ganzzahl ohne Vorzeichen.

ToUInt32(IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in eine entsprechende 32-Bit-Ganzzahl ohne Vorzeichen.

ToUInt64(IFormatProvider)

Konvertiert den Wert dieser Instanz unter Verwendung der angegebenen kulturabhängigen Formatierungsinformationen in eine entsprechende 64-Bit-Ganzzahl ohne Vorzeichen.

Gilt für

Produkt Versionen
.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

Siehe auch