I can\'t think of any reasons why one is better than the other. Compare these two implementations:
public class MyClass
{
public MyClass(string fileName
Not spilling out dependency to assemblies referring your assembly is another reason.
It seems like if calling a constructor for a class in another assembly, your assembly will be required to references all the assemblies that defines any of the types used by any overload. You can workaround this forced dependency by using differently named factory methods.
Example:
Assembly1.dll (requires ref to BarAssembly.dll not so obvious)
class Class1 {
void Main(){
var foo = new Foo();
}
}
Assembly2.dll (no need for ref to BarAssembly.dll here, as CreateFoo and CreateFooWithBar is not overloads)
class Class2 {
void Main(){
var foo = CreateFoo();
}
}
FooAssembly.dll (requires ref to BarAssembly.dll obvious)
class Foo {
public CreateFoo(){
...
}
public CreateFooWithBar(Bar bar){
...
}
public Foo(){
...
}
public Foo(Bar bar){
...
}
}
BarAssembly.dll
class Bar {
public Bar(){
...
}
}
Note: Observed on VS2013 building against .NET Framework 4.5