C#: Connection between IFormattable, IFormatProvider and ICustomFormatter, and when to use what

前端 未结 3 795
孤城傲影
孤城傲影 2020-12-13 18:04

What are the difference and connection between IFormattable, IFormatProvider and ICustomFormatter and when would they be used? A simpl

3条回答
  •  旧巷少年郎
    2020-12-13 18:27

    Custom formatting works base on the coordination between 3 components:

    • Formattable
    • Format provider
    • Formatter

    The formattable objects are instances that can use a format provider along with a format string to format their data by implementing the IFormattable interface. Basically, they will request the format provider to get a formatter and then use the format string which are format instructions to ask the formatter to format their instances. Date/time and numeric types are examples of formattable types.

    The format providers are classes that implement the IFormatProvider interface. They are responsible for returning the formatter object base on the format type requested by the caller. The format type could be the type of whatever that a format provider could understand while the returned formatter should be whatever that the caller (the formattable `object in most cases) could use to format their data.

    The formatters are objects which are responsible for providing formatting services. For date/time and numeric types, format providers are also formatters which are CultureInfo, DateTimeFormatInfo, and NumberFormatInfo.

    In composite formatting implemented by some methods such as String.Format, Console.WriteLine or StringBuilder.AppendFormat, when a format provider is passed to them, they always ask the format provider for a formatter that implements the ICustomFormatter interface. This allows developers to provide various custom formatting to these methods.

提交回复
热议问题