C# ИСПОЛЬЗУЯ ключевое слово - когда и если не использовать его?

Можно попробовать использовать background-repeat: repeat, сделать background-size довольно маленьким и использовать background-image: linear-gradient(45deg, ...):

.light {
  position: absolute;
  width: 200px;
  height: 200px;
  left: 50%;
  top: 50%;
  margin-left: -100px;
  margin-top: -100px;
  border-radius: 100%;
  background-image: linear-gradient(45deg, #ff8000, #ffa040);
  background-repeat: repeat;
  background-size: 20px 20px;
  transform: rotate(45deg);
  /* shadows for 3d effect */
  box-shadow: inset 3px 0px 10px rgba(255, 255, 255, 0.5), inset 10px 10px 50px rgba(255, 255, 255, 0.2), inset -10px -10px 50px rgba(0, 0, 0, 0.2), 0px 0px 10px rgba(0, 0, 0, 0.3);
}


/* glow */
.light:after {
  position: absolute;
  width: 100%;
  height: 100%;
  content: '';
  border-radius: 100%;
  background:
    radial-gradient(ellipse at center, rgba(255, 255, 100, 0.3) 0%, rgba(0, 0, 0, 0) 100%);
}
<div class="light">
</div>
[1112 ]

Поворот всего на 45 градусов также помогает сделать его правдоподобным, на мой взгляд!

Вы также можете сойти с ума и использовать ключевые кадры, чтобы получить эффект свечения:

[119 ]

@keyframes glow {
  0% { filter: brightness(1) contrast(1); }
  50% { filter: brightness(1.1) contrast(1.1); }
  100% { filter: brightness(1) contrast(1); }
}

.light {
  position: absolute; width: 200px; height: 200px;
  left: 50%; top: 50%;
  margin-left: -100px; margin-top: -100px;
  border-radius: 100%;
  
  background-image: linear-gradient(45deg, #ff8000, #ffa040);
  background-repeat: repeat;
  background-size: 20px 20px;
  
  animation: glow 3000ms linear infinite;
  
  transform: rotate(45deg);
  
  box-shadow: 0 0 20px 2px #ff7f00;
}
<div class="light">
</div>

24
задан George Stocker 25 November 2008 в 13:28
поделиться

3 ответа

Нет, IDisposable объекты не расположены, когда они выходят из объема. Это по точно этой причине, что нам нужно IDisposable - для детерминированной очистки.

Они будут в конечном счете , собраны "мусор", и если существует финализатор, которым это (возможно), назовут - но это могло бы быть долгим временем в будущем (не хороший для пулов соединения и т.д.). Сборка "мусора" зависит от давления памяти - если ничто не хочет дополнительную память, нет никакой потребности выполнить цикл GC.

Интересно (возможно), существуют некоторые случаи, где "использование" является болью - когда незаконный класс выдает исключение на Dispose() иногда. WCF является преступником этого. Я обсудил эту тему (с простым обходным решением) здесь .

В основном - если класс реализует IDisposable, и Вы собственный экземпляр (т.е. Вы создали его или безотносительно), это - Ваше задание, чтобы гарантировать, что он расположен. Это могло бы означать через "использование", или это могло бы означать передавать его другой части кода, который принимает на себя ответственность.

я на самом деле видел код отладки типа:

#if DEBUG
    ~Foo() {
        // complain loudly that smoebody forgot to dispose...
    }
#endif

(где Dispose вызовы GC.SuppressFinalize)

21
ответ дан 29 November 2019 в 00:08
поделиться

"IDisposables, от которого не избавляются, когда они выходят из объема?"

номер, если объект IDisposable finalizable, который не является тем же самым, тогда оно будет завершено, когда оно собрало "мусор".

, Который мог бы скоро быть или мог бы быть почти никогда.

книга C#/CLR Jeff Richter очень хороша на всем этом материале, и книга Руководства по проектированию Платформы также полезна.

я должен только использовать ИСПОЛЬЗОВАНИЕ, когда мой объект использует, Располагают для уборки себя?

Вы можете [только 113] использование 'использование', когда объект реализует IDisposable. Компилятор возразит, пытаетесь ли Вы сделать иначе.

5
ответ дан 29 November 2019 в 00:08
поделиться

Для добавления к другим ответам необходимо использовать using (или явное Располагают) каждый раз, когда объект содержит любые ресурсы кроме управляемой памяти. Примерами были бы вещи как файлы, сокеты, соединения с базой данных, или даже дескрипторы рисования GDI.

сборщик "мусора" в конечном счете завершил бы эти объекты, но только в некоторое неуказанное время в будущем. Вы не можете полагаться на него происходящий своевременно, и у Вас, возможно, закончился тот ресурс тем временем.

2
ответ дан 29 November 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: