я реализует синглтон с статической инициализации, как это:Принят предложение ReSharper Ruin This Singleton?
internal sealed class MySingleton
{
private static readonly MySingleton instance = new MySingleton();
public static MySingleton Instance => instance;
private MySingleton()
{
// elided
}
}
ReSharper squiggled публичную собственность Instance и предложил преобразовать его в авто-свойства. В результате, если принимать исправления, выглядит следующим образом:
internal sealed class MySingleton
{
public static MySingleton Instance { get; } = new MySingleton();
private MySingleton()
{
// elided
}
}
Не это «исправить» сделать так, чтобы каждый вызов к свойству Instance будет генерировать новый MySingleton, таким образом, победив всю цель, или есть ли что-то о статических свойствах, которые знает ReSharper, а я нет?
Очень легко запустить этот код и посмотреть, действительно ли он вызывает конструктор каждый раз, когда вызывается получатель. Точка останова или любой побочный эффект в конструкторе сделает ее очень заметной. – Servy
Хотя это будет работать, вы можете столкнуться с проблемами многопоточности и производительности, используя любой из этих фрагментов. Я скоро запишусь на свой компьютер и обеспечу более безопасную реализацию, используя двойную блокировку, чтобы сделать ее поистине безопасной. Хотя я люблю повторять некоторые предложения, можно, как правило, игнорировать, и это будет примером, где это не имеет большого значения в любом случае, хотя важно, чтобы оно соответствовало тому, что вы выбираете. – mbrdev
@mbrdev - Спасибо; Я знаю о проблемах с этим процессом, но мне интересно, какие проблемы с производительностью вы имеете в виду. – bubbleking