C#的静态工厂方法与构造函数相比有哪些优缺点