导出 (0) 打印
全部展开
此文章由机器翻译。 将光标移到文章的句子上,以查看原文。 更多信息。
译文
原文

IConvertible 接口

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

此 API 不兼容 CLS。 

命名空间:  System
程序集:  mscorlib(在 mscorlib.dll 中)

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

IConvertible 类型公开以下成员。

  名称说明
公共方法由 XNA Framework 提供支持受 可移植类库 支持GetTypeCode返回此实例的 TypeCode
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToBoolean使用指定的区域性特定格式设置信息将此实例的值转换为等效的 Boolean 值。
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToByte使用指定的区域性特定格式设置信息将该实例的值转换为等效的 8 位无符号整数。
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToChar使用指定的区域性特定格式设置信息将此实例的值转换为等效的 Unicode 字符。
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToDateTime使用指定的区域性特定格式设置信息将此实例的值转换为等效的 DateTime
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToDecimal使用指定的区域性特定格式设置信息将此实例的值转换为等效的 Decimal 数字。
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToDouble使用指定的区域性特定格式设置信息将此实例的值转换为等效的双精度浮点数字。
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToInt16使用指定的区域性特定格式设置信息将此实例的值转换为等效的 16 位有符号整数。
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToInt32使用指定的区域性特定格式设置信息将此实例的值转换为等效的 32 位有符号整数。
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToInt64使用指定的区域性特定格式设置信息将此实例的值转换为等效的 64 位有符号整数。
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToSByte使用指定的区域性特定格式设置信息将此实例的值转换为等效的 8 位有符号整数。
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToSingle使用指定的区域性特定格式设置信息将此实例的值转换为等效的单精度浮点数字。
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToString使用指定的区域性特定格式设置信息将此实例的值转换为等效的 String
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToType使用指定的区域性特定格式设置信息将此实例的值转换为具有等效值的指定 TypeObject
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToUInt16使用指定的区域性特定格式设置信息将该实例的值转换为等效的 16 位无符号整数。
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToUInt32使用指定的区域性特定格式设置信息将该实例的值转换为等效的 32 位无符号整数。
公共方法由 XNA Framework 提供支持受 可移植类库 支持ToUInt64使用指定的区域性特定格式设置信息将该实例的值转换为等效的 64 位无符号整数。
页首

此接口提供特定的方法,用以将实现类型的实例值转换为具有等效值的公共语言运行时类型。 公共语言运行时类型包括 BooleanSByteByteInt16UInt16Int32UInt32Int64UInt64SingleDoubleDecimalDateTimeCharString

如果转换为公共语言运行时类型不具有任何意义,特定的接口方法实现则会引发 InvalidCastException 例如,如果该接口在 Boolean 类型上实现,由于没有与 Boolean 类型等效且具有意义的 DateTimeToDateTime 方法的实现会引发异常。

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

除了 IConvertible 接口之外,.NET Framework 还提供称作类型转换器的类来将用户定义的数据类型转换为其他数据类型。 有关更多信息,请参见主题通用类型转换

对实现者的说明

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

大多数转换方法有一个类型为 IFormatProvider 的参数,代表当前区域性 (CultureInfo.CurrentCulture) 或特定区域性。 大多数情况下,基类型的 IConvertible 实现将忽略此参数。 但是,可以选择是否在您的代码中使用它。

下面的代码示例演示 Complex 数字类的 IConvertible 的一个实现,使该类首先可强制转换为 Double,然后调用该 Double 的静态 Convert 成员。


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


.NET Framework

受以下版本支持:4.5.2、4.5.1、4.5、4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持:4、3.5 SP1

可移植类库

受以下版本支持:可移植类库

适用于 Windows Phone 应用的 .NET

受以下版本支持:Windows Phone 8、Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带 SP1 或更高版本的服务器核心角色;不支持 Itanium)

.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参阅.NET Framework 系统要求

社区附加资源

添加
显示:
© 2014 Microsoft