struct MyPoint: IFormattable { private int _x; private int _y; public int X { get { return this._x; } } public int Y { get { return this._y; } } public MyPoint(int x, int y) { this._x = x; this._y = y; } #region IFormattable Members public string ToString(string format, IFormatProvider formatProvider) { string formattedString; if (format != null) { format = format.ToLower(); } switch (format) { case null: formattedString = String.Format("({0}, {1})", this.X, this.Y); break; case "x": formattedString = this.X.ToString(); break; case "y": formattedString = this.Y.ToString(); break; default: throw new FormatException(String.Format("Invalid format string: '{0}'.", format)); } return formattedString; } #endregion }
MyPoint a = new MyPoint(5, 15); Console.WriteLine("The point's value is {0}", a); Console.WriteLine("The point's x value is {0:x}", a); Console.WriteLine("The point's y value is {0:y}", a); // Prints: // The point's value is (5, 15) // The point's x value is 5 // The point's y value is 15