The statement public Form1(String fileName = null) specifies one optional argument.Optional arguments are arguments that have a default value in the function,you always have the option to either call the function with or without argument,if you specify any argument the new argument is used in place of default argument,and in case you don't specify an argument when calling the function the default argument is used.The default value to optinal argument must always be a value that is a constant at compile time.To better clarify that let me take an example.Consider we have a function that adds two numbers.
private int AddNumbers(int a=10,int b=15) { int c=a+b; return c; } We have specifies two optional arguments for the function,the above functions doesn't flag any error but as I said optional arguments must have a default value which is know at design time so the function below flags an error that follows Default parameter values must be compile time constant. because it uses default values that will be known at runtime.
int z,x; private int AddNumbers(int a=z,int b=x) { int c=a+b; return c; } Consider that the variables z and x are calculated using some logic at runtime,but are not unknown at compile time.This would flag the error.
Next,let me tell you differences in a normal function and a functional with optional parameters.The first function that compiles with no errors can be called in two ways;
**By passing some arguments when calling**
AddNumbers(5,15); This will return 20.
**By calling the function without specifying any arguments**
AddNumbers(); This will return 25,remember we defined 10,15 as default arguments.Both the calls are valid and will compile without any errors.
So now I hope you've found answer to your question,if you would like to read more have a look here.