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
IFormattableinterface’sToString()method on theDateTimeobject and passes that theMM/dd/yyyyformat string. It is that implementation which returns the correct string. -
Any object that implement
IFormattablesupports this feature. You can even write your own! -
Yes, see above.