Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

Интерфейс IConvertible

 

Опубликовано: Октябрь 2016

Определяет методы, которые преобразуют значение реализующей ссылки или типа значения в тип среды CLR с эквивалентным значением.

Этот API не является CLS-совместимым.

Пространство имен:   System
Сборка:  mscorlib (в mscorlib.dll)

[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public interface IConvertible

ИмяОписание
System_CAPS_pubmethodGetTypeCode()

Возвращает TypeCode для данного экземпляра.

System_CAPS_pubmethodToBoolean(IFormatProvider)

Преобразует значение этого экземпляра в эквивалентное логическое значение, с помощью указанного языком и региональными параметрами сведения о форматировании.

System_CAPS_pubmethodToByte(IFormatProvider)

Преобразует значение этого экземпляра в эквивалентное 8-разрядное целое число без знака с использованием указанного языком и региональными параметрами сведения об особенностях форматирования.

System_CAPS_pubmethodToChar(IFormatProvider)

Преобразует значение этого экземпляра в эквивалентный символ Юникода, используя заданную информацию форматирования конкретного языка и региональных параметров.

System_CAPS_pubmethodToDateTime(IFormatProvider)

Преобразует значение этого экземпляра в эквивалентное DateTime с помощью указанного языком и региональными параметрами сведения о форматировании.

System_CAPS_pubmethodToDecimal(IFormatProvider)

Преобразует значение этого экземпляра в эквивалентное Decimal номер, используя заданную информацию форматирования конкретного языка и региональных параметров.

System_CAPS_pubmethodToDouble(IFormatProvider)

Преобразует значение этого экземпляра в эквивалентное число двойной точности с плавающей запятой с использованием указанного языка и региональных параметров сведения об особенностях форматирования.

System_CAPS_pubmethodToInt16(IFormatProvider)

Преобразует значение данного экземпляра в эквивалентное ему 16-разрядное целое число со знаком с использованием указанного языком и региональными параметрами сведения об особенностях форматирования.

System_CAPS_pubmethodToInt32(IFormatProvider)

Преобразует значение данного экземпляра в эквивалентное 32-разрядное целое число со знаком с использованием указанного языком и региональными параметрами сведения о форматировании.

System_CAPS_pubmethodToInt64(IFormatProvider)

Преобразует значение этого экземпляра в эквивалентное 64-разрядное целое число со знаком с использованием указанного языком и региональными параметрами сведения об особенностях форматирования.

System_CAPS_pubmethodToSByte(IFormatProvider)

Преобразует значение этого экземпляра в эквивалентное 8-разрядное целое число со знаком с использованием указанного языком и региональными параметрами сведения об особенностях форматирования.

System_CAPS_pubmethodToSingle(IFormatProvider)

Преобразует значение данного экземпляра в эквивалентное число одинарной точности число с плавающей запятой с помощью указанного языком и региональными параметрами сведения об особенностях форматирования.

System_CAPS_pubmethodToString(IFormatProvider)

Преобразует значение этого экземпляра в эквивалентное String с помощью указанного языком и региональными параметрами сведения о форматировании.

System_CAPS_pubmethodToType(Type, IFormatProvider)

Преобразует значение данного экземпляра, Object указанного Type , с эквивалентным значением, с помощью указанного языком и региональными параметрами сведения о форматировании.

System_CAPS_pubmethodToUInt16(IFormatProvider)

Преобразует значение данного экземпляра в эквивалентное ему 16-разрядное целое число без знака с помощью указанного языком и региональными параметрами сведения об особенностях форматирования.

System_CAPS_pubmethodToUInt32(IFormatProvider)

Преобразует значение этого экземпляра в эквивалентное 32-разрядное целое число без знака с использованием указанного языком и региональными параметрами сведения об особенностях форматирования.

System_CAPS_pubmethodToUInt64(IFormatProvider)

Преобразует значение этого экземпляра в эквивалентное 64-разрядное целое число без знака с использованием указанного языком и региональными параметрами сведения об особенностях форматирования.

Этот интерфейс предоставляет методы для преобразования значения экземпляра реализующего типа в тип среды CLR с эквивалентным значением. Типами среды CLR, Boolean, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double, Decimal, DateTime, Char, и String.

Если осмысленное преобразование в тип среды CLR, то реализация метода отдельных интерфейсов выдает InvalidCastException. Например, если этот интерфейс реализован логический тип, реализация ToDateTime метод создает исключение, поскольку не может применяться DateTime эквивалентный тип Boolean.

Общеязыковая среда выполнения предоставляет обычно IConvertible интерфейс, с помощью Convert класса. Общеязыковая среда выполнения также использует IConvertible интерфейс внутренне, в явных реализаций интерфейса, для упрощения кода, используемого для поддержки преобразований в Convert класс и базовые типами среды CLR.

В дополнение к IConvertible интерфейсом, платформа .NET Framework предоставляет классы, называемые преобразователями типов для преобразования определенных пользователем типов данных в другие типы данных. Дополнительные сведения см. в разделе Generalized Type Conversion.

Заметки о реализации:

При реализации IConvertible интерфейса реализации будет вызываться автоматически Convert.ChangeType метод Если Object параметр – это экземпляр этого типа, реализующего и Type параметр имеет тип среды CLR.

Большинство методов преобразования имеют параметр типа IFormatProvider представляющий текущую культуру (CultureInfo.CurrentCulture) или определенного языка и региональных параметров. В большинстве случаев IConvertible реализации базовых типов игнорируют этот параметр. Тем не менее можно выбрать, использовать ли его в коде.

В следующем образце кода показана реализация IConvertible для класса комплексных чисел, который позволяет привести первый как Double и последующим вызовом статических Convert членов, Double.

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

Универсальная платформа Windows
Доступно с 10
.NET Framework
Доступно с 1.1
Переносимая библиотека классов
Поддерживается в: переносимые платформы .NET
Silverlight
Доступно с 2.0
Windows Phone Silverlight
Доступно с 7.0
Вернуться в начало
Показ: