#c# #.net #winforms
Вопрос:
public class FileStorage
{
private static FileStorage _instance;
public static FileStorage instance
{
get
{
return (_instance != null) ? _instance : _instance = new FileStorage();
}
}
//public string GetAddress...
}
могу ли я использовать этот фрагмент кода для простого одноэлементного решения? код будет выполняться в одном потоке.
Возвращает ли возврат, возвращает ли новое хранилище файлов()? что именно должно быть возвращено сюда?
var foo = (bee = new[]{/*immagination...*/})
будет ли foo логическим значением? или, по сути, это ссылка на пчелу?
Комментарии:
1. Да, вы можете использовать это. Хотя писать легче
public static FileStorage instance => _instance ??= new FileStorage()
. Почему бы не посмотреть, какой тип данныхfoo
в вашем примере?2. Thx canton7, я довольно далек от концепции c#, я также довольно новичок в отладке, и я запускаю vs-код, потому что вот я начал, вот мы с вами быстрее, чем мои проб и ошибок :’D
3. Используйте, например sharplab.io чтобы проверить вещи, не открывая вообще ничего. Мы здесь не для того, чтобы вы могли лениться: от вас ожидают, что вы приложите усилия для решения своих проблем самостоятельно
4. «простое одноэлементное решение»? Нет .
5. Понизьте голос за «не показывает исследовательских усилий», так как вопрос легко поддается проверке.
Ответ №1:
Да, это сработает так, как вы задумали. Однако, даже если вы работаете с однопоточным приложением, имейте в виду, что этот метод не является потокобезопасным.
Тем не менее, чтобы избежать поиска ошибок, когда вам нужно использовать потоки в вашем приложении, обычно лучше заранее обеспечить безопасность потоков.
Например:
public class FileStorage
{
private static readonly object _singletonLock = new object();
private static FileStorage _instance = null;
public static FileStorage Instance
{
get
{
lock (_singletonLock)
{
return _instance ??= new FileStorage();
}
}
}
}
Этот фрагмент кода использует ??=
оператор (присваивать, если значение равно нулю), а также инкапсулирует метод получения Instance
свойства в lock
оператор-для обеспечения потокобезопасности.
??=
он намного компактнее и легче читается и имеет тот же эффект, что и ваш троичный оператор.
Комментарии:
1. не знал об операторе Assign if null, очень приятно, что он там объяснен, спасибо, я задал вопрос, потому что я действительно не понимаю магии ~ волшебства, о
()? true : b = false
том, и почему он работает на более низком вычислительном уровне