Table of contents Home page
using System; public struct ComplexNumber : IConvertible { private double real; private double imaginary; public ComplexNumber(double real, double imaginary) { this.real = real; this.imaginary = imaginary; } public TypeCode GetTypeCode() { return TypeCode.Object; } public bool ToBoolean(IFormatProvider provider) { throw new InvalidCastException(); } public byte ToByte(IFormatProvider provider) { throw new InvalidCastException(); } public char ToChar(IFormatProvider provider) { throw new InvalidCastException(); } public sbyte ToSByte(IFormatProvider provider) { throw new InvalidCastException(); } public short ToInt16(IFormatProvider provider) { throw new InvalidCastException(); } public int ToInt32(IFormatProvider provider) { throw new InvalidCastException(); } public long ToInt64(IFormatProvider provider) { throw new InvalidCastException(); } public ushort ToUInt16(IFormatProvider provider) { throw new InvalidCastException(); } public uint ToUInt32(IFormatProvider provider) { throw new InvalidCastException(); } public ulong ToUInt64(IFormatProvider provider) { throw new InvalidCastException(); } public float ToSingle(IFormatProvider provider) { throw new InvalidCastException(); } public double ToDouble(IFormatProvider provider) { return this.real; } public decimal ToDecimal(IFormatProvider provider) { throw new InvalidCastException(); } public DateTime ToDateTime(IFormatProvider provider) { throw new InvalidCastException(); } public string ToString(IFormatProvider provider) { return this.real.ToString() + (this.imaginary >= 0 ? "+" : "") + this.imaginary.ToString() + "i"; } public Object ToType(Type conversionType, IFormatProvider provider) { throw new InvalidCastException(); } } public class Program { public static void Main(string[] args) { ComplexNumber c = new ComplexNumber(5, -6); Console.WriteLine("Conversion to string: {0}", Convert.ToString(c)); Console.WriteLine("Conversion to double: {0}", Convert.ToDouble(c)); c = new ComplexNumber(-7, 9); Console.WriteLine("Conversion to string: {0}", Convert.ToString(c)); Console.WriteLine("Conversion to double: {0}", Convert.ToDouble(c)); Console.ReadKey(); } }