Data Types C#

using System;
  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());
    }
  }
  class Class1
  {
    static void Main(string[] args)
    {
      Complex    testComplex = new Complex(4,7);
      Console.WriteLine(Convert.ToBoolean(testComplex));
    }
  }