No, there is no difference, as it results in the same IL.
Compiling the following:
class Program
{
static void Main(string[] args)
{
var objectA = new Test();
objectA.PropA = 1;
objectA.PropB = 10;
var objectB = new Test() { PropA = 2, PropB = 20 };
}
}
public class Test
{
public int PropA { get; set; }
public int PropB { get; set; }
}
Will produce the following IL (release mode):
IL_0000: newobj instance void InitTest.Test::.ctor()
IL_0005: dup
IL_0006: ldc.i4.1
IL_0007: callvirt instance void InitTest.Test::set_PropA(int32)
IL_000c: ldc.i4.s 10
IL_000e: callvirt instance void InitTest.Test::set_PropB(int32)
IL_0013: newobj instance void InitTest.Test::.ctor()
IL_0018: dup
IL_0019: ldc.i4.2
IL_001a: callvirt instance void InitTest.Test::set_PropA(int32)
IL_001f: dup
IL_0020: ldc.i4.s 20
IL_0022: callvirt instance void InitTest.Test::set_PropB(int32)
IL_0027: pop
IL_0028: ret
Both call the setter methods the same way after creating the instance.