String.Format
matches each of the tokens inside the string ({0}
etc) against the corresponding object: https://learn.microsoft.com/en-us/dotnet/api/system.string.format#overloads
A format string is optionally provided:
{ index[,alignment][ : formatString] }
If formatString
is provided, the corresponding object must implement IFormattable and specifically the ToString
method that accepts formatString
and returns the corresponding formatted string: https://learn.microsoft.com/en-us/dotnet/api/system.iformattable.tostring
An IFormatProvider
may also be used to capture basic formatting standards/defaults etc. Examples here and here.
So the answers to your questions in order:
-
It uses the
IFormattable
interface’sToString()
method on theDateTime
object and passes that theMM/dd/yyyy
format string. It is that implementation which returns the correct string. -
Any object that implement
IFormattable
supports this feature. You can even write your own! -
Yes, see above.