1) There isn't one defined - which means that it isn't anything your should rely on as it's an implementation detail and subject to change without notice in future updates. A quick check with Reflector says that List and Dictionary are initialized to empty, but increase their size in different ways.
2) Since when?
3) Because when you have a finally clause in C#, the C# specification states that
every statement within the finally clause must execute. Because of this, it is not possible to use a return statement within a finally clause as it could allow statements to be "missed". In addition, what should happen here?
private int MyMethod()
{
try
{
return SomeFunctionReturningInt();
}
finally
{
return -1;
}
}
SomeFunctionReturningInt
would have to be called before the
finally
block, and then the finally tries to establish the return value? Nasty!
4)
this
is the current instance of the class at runtime. Most of teh time you don't need it at all, but it allows you to pass the current instance to a method:
int i = GetValue(this);
Or to clarify exactly which value you mean when a local value overrides a class level value:
private int setting;
private void DoSomething(int setting)
{
this.setting = setting;
}