在 class 的静态方法中创建 class 的实例是否干净?
Is it clean to create an instance of a class inside a static method of that class?
我里面有一个非静态的 class 和一个静态的方法。到目前为止毫无疑问。但我在静态方法中创建了相同 class 的实例。我不确定它是否会创建循环引用。我 运行 它处于调试模式以查看任何意外行为,但看不到。不过,我想确认一下。在同一个 class 中的静态方法中创建一个 class 的实例是否可以?这是一个坏习惯吗?
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();
没有问题,这段代码做的是常规的。
使用静态方法创建对象实例:
可能是也可能不是 singleton pattern(你可以在这里问自己这个问题):
也可以是factory pattern,但这里不是:
这是我所说的 static 运行 方法模式的变体*:
- 它在每次调用时创建一个 class 的对象实例,或者如果是单例则可以是唯一的,
- 它执行这个实例:显示一个表单,或者从网络下载一个文件,等等,
- 它 returns 一个结果,或者不是:对话框或文件的结果,等等。
在这种模式下,构造函数通常是私有的以确保一致性。
*我还没学过标准design patterns
我里面有一个非静态的 class 和一个静态的方法。到目前为止毫无疑问。但我在静态方法中创建了相同 class 的实例。我不确定它是否会创建循环引用。我 运行 它处于调试模式以查看任何意外行为,但看不到。不过,我想确认一下。在同一个 class 中的静态方法中创建一个 class 的实例是否可以?这是一个坏习惯吗?
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();
没有问题,这段代码做的是常规的。
使用静态方法创建对象实例:
可能是也可能不是 singleton pattern(你可以在这里问自己这个问题):
也可以是factory pattern,但这里不是:
这是我所说的 static 运行 方法模式的变体*:
- 它在每次调用时创建一个 class 的对象实例,或者如果是单例则可以是唯一的,
- 它执行这个实例:显示一个表单,或者从网络下载一个文件,等等,
- 它 returns 一个结果,或者不是:对话框或文件的结果,等等。
在这种模式下,构造函数通常是私有的以确保一致性。
*我还没学过标准design patterns