Если вы хотите увидеть, нажали ли они точный ключ (например, «b») Сделайте следующее:
while True:
choice = raw_input("> ")
if choice == 'b' :
print "You win"
input("yay")
break
При фактическом содержании неуправляемых ресурсов, которые не будут автоматически очищены сборщиком "мусора" и очищающий неуправляемые ресурсы в Вашем Располагать (), то да, необходимо выполнить, то же Завершает ().
Если Вы реализуете IDisposable по некоторой другой причине, реализация Завершают (), не требуется.
Основной вопрос - это: Если Располагают (), не был назван, и Ваш объект собрал "мусор", был бы утечка памяти? Если да, реализация Завершает. Если не, Вы не должны. Кроме того, постарайтесь не реализовывать, Завершают "просто, потому что это более безопасно". Объектам с пользовательскими финализаторами могут потенциально быть нужны две передачи GC для освобождения их - однажды для помещения их на незаконченную очередь финализаторов, и вторая передача в на самом деле освобождает их память.
Нет, Вы не должны иметь, Завершают, если у Вас нет неуправляемых ресурсов для чистки.
В большинстве случаев причина, класс доступен, состоит в том, потому что это сохраняет ссылки на другие управляемые объекты IDisposable. В этом случае не Завершите метод, необходимо или желателен.
Как другие сказали, Вы не должны реализовывать финализатор, если Вы непосредственно не держите неуправляемые ресурсы. Кроме того, принятие Вас работает в.NET 2.0 или позже, маловероятно, что необходимо будет когда-либо реализовывать финализатор, потому что обычно SafeHandle может использоваться для обертывания неуправляемых ресурсов.
Я записал довольно длинное сообщение в блоге, покрывающее фон и реализацию IDisposable и финализаторов некоторое время назад, которые могут стоить чтения, если Вы не полностью соглашаетесь с этим.
Implements IDisposable
Public Overloads Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Protected Overloads Sub Dispose(ByVal disposing As Boolean)
If disposing Then
' Free other state (managed objects).
End If
' Free your own state (unmanaged objects).
' Set large fields to null.
End Sub
Protected Overrides Sub Finalize()
Dispose(False)
MyBase.Finalize()
End Sub