https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/attributes/caller-information[Caller information attributes] provide a way to get information about the caller of a method through https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments#optional-arguments[optional] parameters. But they only work right if their values aren't provided explicitly. So if you define a method with caller info attributes in the middle of the parameter list, the caller is forced to use named arguments if they want to use the method properly.
* https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/attributes/caller-information[Determine caller information using attributes interpreted by the C# compiler]
* https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments#optional-arguments[Named and Optional Arguments]
\[~ann.campbell.2] I modified the sample code: there can't be any parameter without a default value after parameters with default values. (So I added the ``++null++`` default value to the ``++message++``)
And also modified the last sentence. It is possible to not specify all parameters in a call, but then you force the callers of this method to use named arguments.