为什么要使用Create方法而不是使用"new"?

Mic*_*cki 11 c# constructor

有什么优点,什么时候使用静态构造函数是合适的?

public class MyClass
{
    protected MyClass()
    {
    }

    public static MyClass Create()
    {
        return new MyClass();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后通过创建类的实例

MyClass myClass = MyClass.Create();
Run Code Online (Sandbox Code Playgroud)

而不是只有一个公共构造函数和使用创建对象

MyClass myClass = new MyClass();
Run Code Online (Sandbox Code Playgroud)

我可以看到,如果Create方法返回类实现的接口实例,第一种方法很有用......它会强制调用者创建接口的实例而不是特定的类型.

Yis*_*hai 15

这是工厂模式,它通常可用于生成子类,但允许静态方法的参数确定哪一个.

如果不总是需要新对象,也可以使用它,例如在池实现中.

如果对象的所有实例都需要在创建时进行高速缓存或以其他方式注册,也可以使用它.这确保了客户端不会忘记这样做.

当然,它是Singleton模式的一部分.


小智 8

这不是单例...如果是,Create会每次都返回相同的实例.

这是一种工厂模式.我通常用接口而不是类来做这个,所以我必须在这里伸展,但一个人为的例子是:

public static MyClass Create()
{
    if(OS == Windows)
        return new MyDerivedClassForWindows();
    else if(OS == Linux)
        return new MyDerivedClassForLinux();
    etc....
}
Run Code Online (Sandbox Code Playgroud)