【发布时间】:2021-06-20 04:49:35
【问题描述】:
我有一个非静态类和一个静态方法。到目前为止没有任何疑问。但我在静态方法中创建了同一类的实例。我不确定它是否会创建循环引用。我在调试模式下运行它以查看任何意外行为,但不能。但是,我想确认这一点。可以在同一个类的静态方法中创建一个类的实例吗?这是一个坏习惯吗?
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();
【问题讨论】:
-
这样做很好,但唯一要记住的是静态成员和方法使单元测试变得困难。有一个权衡。有时最好有一个类
IDownloadHelperFactory factory = new DownloadHelperFactory()来创建IDownloadHelper helper = factory.Create();的实例。这种抽象允许更容易的单元测试。这取决于你的情况,什么最适合你。
标签: c# class oop static-methods instantiation