что может заставить использовать второй вариант? Я, насколько понимаю, первый вариант вполне справляется со своей задачей и так же создаёт экземпляр класса при первом обращении к этому классу. Так зачем мне использовать второй вариант? Так, на всякий случай: Зачем двойная проверка во втором варианте я прекрасно понимаю.
public class DataProvider
{
static DataProvider()
{
Instance = new DataProvider();
}
private DataProvider()
{
// Init data
}
public static DataProvider Instance { get; private set; }
}
public class DataProvider
{
private static DataProvider _instance;
private static readonly object _syncLock = new object();
private DataProvider()
{
// Init data
}
public static DataProvider Instance
{
get
{
if (_instance == null)
{
lock (_syncLock)
{
if (_instance == null)
{
_instance = new DataProvider();
}
}
}
return _instance;
}
}
}
Я просто часто сижу и думаю, какой способ использовать.
Всё, понял. Я почему-то думал, что в статическом конструкторе не будет проблем с многопоточностью. Кто-то очень давно мне такое сказал и я принял за истину. Хотя, если подумать, то проблемы должны быть такие же, как и без лока и двойной проверки во втором варианте.