Это, кажется, работает хорошо для меня до сих пор:
//Checks if a touch screen
is_touch_screen = 'ontouchstart' in document.documentElement;
if (is_touch_screen) {
// Do something if a touch screen
}
else {
// Not a touch screen (i.e. desktop)
}
Как правило, потребитель несет ответственность за надлежащую утилизацию Одноразового объекта. Таким образом, если вы передаете Stream другому объекту, вам не следует его удалять - это будет ответственность потребителя.
Таким образом, в четко определенных сценариях вы либо держите ссылку на объект Disposable, либо в этом случае вы должны убедиться, что он правильно утилизирован; или вы передаете ссылку кому-то другому и забываете о ней.
А как насчет тех случаев, когда вам нужно сохранить ссылку самому, но все же передать ее? В этих случаях передайте копию ресурса Disposable - это позволит вам и потребителю управлять временем жизни двух экземпляров независимо друг от друга. Однако, если вы попали в такую ситуацию, вам следует пересмотреть свой дизайн, поскольку я бы назвал это запахом кода.
Если что-то еще использует поток после того, как ассемблер закончил с ним, ассемблер не должен «владеть» потоком. Вызывающий должен либо создать поток для использования ассемблером (и последующими модулями), либо ассемблер должен вернуть новый поток, который затем должен закрыть вызывающий.
Было бы поучительно увидеть некоторые дополнительные сведения о том, что как выглядит архитектура вашей программы и какие методы мы здесь обсуждаем.
В целом я согласен с предыдущими комментариями. Однако, если ваша модель не подходит для этого, вы можете сделать то же, что Microsoft сделала с XML Writer: он принимает параметр XMLWriterSettings, когда вы его создаете, и одно из свойств объекта настроек описывает, должен ли писатель закрывать базовый поток, когда писатель избавлен.
Я делал эти проекты в TECS следующим образом:
Как только я просмотрел все строки , Я могу закрыть поток файлов и безопасно работать с массивом строк.