so does anyone have any idea about the difference between these various ways to initializing an object ?
There's no difference at all. In both cases you're using an object initializer, and if you don't specify any constructor arguments, that's exactly equivalent to providing an empty list of constructor arguments. From section 7.6.10.1 of the C# spec:
An object creation expression can omit the constructor argument list and enclosing parentheses provided it includes an object initializer or collection initializer. Omitting the constructor argument list and enclosing parentheses is equivalent to specifying an empty argument list.
Note that when you just invoke a constructor without using an object initializer (the braces) you have to specify the constructor arguments. So:
Foo foo = new Foo(); // Valid
Foo foo = new Foo; // Invalid
Foo foo = new Foo() {}; // Valid
Foo foo = new Foo {}; // Valid
The "valid" lines are all exactly equivalent, including any use of default parameters - so Foo
might only have a constructor like this:
// You can invoke this without specifying arguments
public Foo(int x = 0)
{
}
See section 7.6.10 of the C# 5 spec for more details.