在类的静态方法中创建该类的实例是否干净



我有一个非静态类和一个静态方法。到目前为止没有任何疑问。但是我在静态方法中创建了一个相同类的实例。我不确定它是否会创建一个循环引用。我在调试模式下运行它以查看任何意外的行为,但无法。不过,我想证实这一点。在同一个类的静态方法中创建一个类实例可以吗?这是个坏习惯吗?

public class DownloadHelper
{
//fields, properties
public DownloadHelper()
{
// some code
}
public async Task<bool> HttpCalls()
{
await Task.Delay(1000);
return true;
}
public static async void GetPreparedInAdvance()
{
var helper = new DownloadHelper();
var success = await helper.HttpCalls();
// some more codes
}
}
// Is it ok to call like this?
DownloadHelper.GetPreparedInAdvance();
// little later,
DownloadHelper.GetPreparedInAdvance();

没有问题,此代码所做的是常规的。

使用静态方法创建对象实例:

  • 可能是也可能不是单例模式(你可以在这里问自己这个问题(:

    C#中的Singleton设计模式

  • 也可以是工厂模式,但不在此:

    C#中的工厂方法设计模式

这里是我称之为静态运行方法模式的变体*:

  • 它在每次调用中创建类的对象实例,或者如果是singleton,则可以是唯一的
  • 它执行这个实例:显示一个表单,或者从网上下载一个文件,等等
  • 它会返回对话框或文件的结果,依此类推

对于这样的模式,构造函数通常是私有的,以确保一致性。


*我还没有研究标准设计模式

最新更新