本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

IConvertible 接口

 

定义将实现引用或值类型的值转换为具有等效值的公共语言运行时类型的方法。

此 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)

将此实例的值转换为等效的 Unicode 字符使用指定的区域性特定格式设置信息。

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 位无符号整数。

此接口提供方法将实现类型实例的值转换为公共语言运行时类型具有等效值。 公共语言运行时类型是 Boolean, ,SByte, ,Byte, ,Int16, ,UInt16, ,Int32, ,UInt32, ,Int64, ,UInt64, ,Single, ,Double, ,Decimal, ,DateTime, ,Char, ,和 String

如果没有有意义的转换为公共语言运行时类型,则会引发特定的接口方法实现 InvalidCastException 例如,如果在一个布尔值上实现此接口的类型、 的实现 ToDateTime 方法将引发异常,因为没有有意义 DateTime 等效于布尔值类型。

公共语言运行时通常公开 IConvertible 接口通过 Convert 类。 公共语言运行库还使用 IConvertible 接口在内部,在显式接口实现中,来简化代码用来支持中的转换 Convert 类和基本的公共语言运行时类型。

除了 IConvertible 接口,.NET Framework 提供了类,用于将用户定义数据类型转换为其他数据类型名的类型转换器。 有关详细信息,请参见Generalized Type Conversion主题。

实现函数说明:

如果实现 IConvertible 接口,您的实现将会自动调用 Convert.ChangeType 方法如果 Object 参数是实现类型实例和 Type 参数是公共语言运行时类型。

转换的大多数方法具有一个类型参数 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 起可用
返回页首
显示: