添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

提示和注释

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

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

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

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

对实现者的说明

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

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

System.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; 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 description for Class1. 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 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。

 
推荐文章