VB Visual Basic  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

IDisposable и управление ресурсами

Тест по теме «IDisposable и управление ресурсами» состоит из 30 вопросов: нужно читать код, сравнивать близкие решения, находить границы применимости правил и разбирать последствия ошибок. Заданий с кодом — 18; после каждого ответа открывается объяснение.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На тест отведено 85 минут; после ответа можно открыть объяснение.
Вопрос 1 из 30
Какой контракт действительно соблюдает показанный фрагмент из раздела «Шаблон освобождения ресурсов»?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Class NativeBuffer
    Implements IDisposable
    Private handle As IntPtr
    Private disposed As Boolean
    Public Sub Dispose() Implements IDisposable.Dispose
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
    Protected Overridable Sub Dispose(disposing As Boolean)
        If disposed Then Return
        If handle <> IntPtr.Zero Then Marshal.FreeHGlobal(handle) : handle = IntPtr.Zero
        disposed = True
    End Sub
End Class
Вопрос 2 из 30
Раздел «Шаблон освобождения ресурсов»: перед объединением правки нужно проверить один принцип. Какой именно?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Option Strict On
Namespace ReviewCase24_1
    Class NativeBuffer
        Implements IDisposable
        Private handle As IntPtr
        Private disposed As Boolean
        Public Sub Dispose() Implements IDisposable.Dispose
            Dispose(True)
            GC.SuppressFinalize(Me)
        End Sub
        Protected Overridable Sub Dispose(reviewDisposing As Boolean)
            If disposed Then Return
            If handle <> IntPtr.Zero Then Marshal.FreeHGlobal(handle) : handle = IntPtr.Zero
            disposed = True
        End Sub
    End Class
End Namespace
Вопрос 3 из 30
Раздел «Шаблон освобождения ресурсов»: какое правило нельзя считать проверенным одним обычным примером?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Option Explicit On
Option Infer On
Namespace BoundaryCase24_1
    Class NativeBuffer
        Implements IDisposable
        Private handle As IntPtr
        Private disposed As Boolean
        Public Sub Dispose() Implements IDisposable.Dispose
            Dispose(True)
            GC.SuppressFinalize(Me)
        End Sub
        Protected Overridable Sub Dispose(edgeDisposing As Boolean)
            If disposed Then Return
            If handle <> IntPtr.Zero Then Marshal.FreeHGlobal(handle) : handle = IntPtr.Zero
            disposed = True
        End Sub
    End Class
End Namespace
Вопрос 4 из 30
Раздел «Шаблон освобождения ресурсов»: что нужно сделать частью контракта рабочего модуля?
Вопрос 5 из 30
Раздел «Шаблон освобождения ресурсов»: какое правило остаётся верным для современного Visual Basic?
Вопрос 6 из 30
Раздел «Блоки Using»: что в этом коде определяет результат, а не случайное совпадение тестовых данных?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Imports System.IO
Module Demo
    Sub Copy(source As Stream, targetPath As String)
        Using target = File.Create(targetPath)
            source.CopyTo(target)
        End Using
    End Sub
End Module
Вопрос 7 из 30
Раздел «Блоки Using»: какое ограничение нельзя убрать только потому, что обычный пример проходит?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Option Strict On
Imports System.IO
Namespace ReviewCase24_2
    Module Demo
        Sub Copy(reviewSource As Stream, reviewTargetPath As String)
            Using target = File.Create(reviewTargetPath)
                reviewSource.CopyTo(target)
            End Using
        End Sub
    End Module
End Namespace
Вопрос 8 из 30
Раздел «Блоки Using»: для участка с Copy нужен отрицательный тест. Какой контракт стоит проверить, меняя только одно условие?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Option Explicit On
Option Infer On
Imports System.IO
Namespace BoundaryCase24_2
    Module Demo
        Sub Copy(edgeSource As Stream, edgeTargetPath As String)
            Using target = File.Create(edgeTargetPath)
                edgeSource.CopyTo(target)
            End Using
        End Sub
    End Module
End Namespace
Вопрос 9 из 30
Раздел «Блоки Using»: что здесь важнее локального удобства: какой контракт должен быть виден в коде?
Вопрос 10 из 30
В управлении ресурсами какое правило о блоке Using остаётся верным для современного Visual Basic?
Вопрос 11 из 30
Раздел «Финализаторы»: в примере с NativeHandle важна не форма записи, а поведение. Какое утверждение его описывает?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Class NativeHandle
    Protected Overrides Sub Finalize()
        Try
            ReleaseNativeHandle()
        Finally
            MyBase.Finalize()
        End Try
    End Sub
End Class
Вопрос 12 из 30
Раздел «Финализаторы»: какое ограничение нельзя убрать только потому, что обычный пример проходит?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Option Strict On
Namespace ReviewCase24_3
    Class NativeHandle
        Protected Overrides Sub Finalize()
            Try
                ReleaseNativeHandle()
            Finally
                MyBase.Finalize()
            End Try
        End Sub
    End Class
End Namespace
Вопрос 13 из 30
Раздел «Финализаторы»: что изменится первым при нарушении ключевого допущения этого фрагмента?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Option Explicit On
Option Infer On
Namespace BoundaryCase24_3
    Class NativeHandle
        Protected Overrides Sub Finalize()
            Try
                ReleaseNativeHandle()
            Finally
                MyBase.Finalize()
            End Try
        End Sub
    End Class
End Namespace
Вопрос 14 из 30
Раздел «Финализаторы»: какой вариант оставляет важное условие явным для следующего разработчика?
Вопрос 15 из 30
Какое утверждение точнее отделяет «Финализаторы» от соседних механизмов?
Вопрос 16 из 30
Не запуская фрагмент, выберите объяснение, которое учитывает весь механизм «Владение ресурсом».
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Imports System.IO

Class ReportWriter
    Implements IDisposable

    Private ReadOnly stream As Stream
    Private ReadOnly ownsStream As Boolean
    Private disposed As Boolean

    Public Sub New(stream As Stream, ownsStream As Boolean)
        Me.stream = stream
        Me.ownsStream = ownsStream
    End Sub

    Public Sub Dispose() Implements IDisposable.Dispose
        If disposed Then Return
        If ownsStream Then stream.Dispose()
        disposed = True
    End Sub
End Class
Вопрос 17 из 30
Раздел «Владение ресурсом»: какую договорённость важнее сохранить, чем выиграть несколько строк кода?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Option Strict On
Imports System.IO

Namespace ReviewCase24_4
    Class ReportWriter
        Implements IDisposable

        Private ReadOnly reviewStream As Stream
        Private ReadOnly reviewOwnsStream As Boolean
        Private disposed As Boolean

        Public Sub New(reviewStream As Stream, reviewOwnsStream As Boolean)
            Me.reviewStream = reviewStream
            Me.reviewOwnsStream = reviewOwnsStream
        End Sub

        Public Sub Dispose() Implements IDisposable.Dispose
            If disposed Then Return
            If reviewOwnsStream Then reviewStream.Dispose()
            disposed = True
        End Sub
    End Class
End Namespace
Вопрос 18 из 30
Какое свойство механизма «Владение ресурсом» нужно проверить на редком, но допустимом сценарии?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Option Explicit On
Option Infer On
Imports System.IO

Namespace BoundaryCase24_4
    Class ReportWriter
        Implements IDisposable

        Private ReadOnly edgeStream As Stream
        Private ReadOnly edgeOwnsStream As Boolean
        Private disposed As Boolean

        Public Sub New(edgeStream As Stream, edgeOwnsStream As Boolean)
            Me.edgeStream = edgeStream
            Me.edgeOwnsStream = edgeOwnsStream
        End Sub

        Public Sub Dispose() Implements IDisposable.Dispose
            If disposed Then Return
            If edgeOwnsStream Then edgeStream.Dispose()
            disposed = True
        End Sub
    End Class
End Namespace
Вопрос 19 из 30
Какое решение соответствует реальному времени жизни объектов и правилам «Владение ресурсом»?
Вопрос 20 из 30
Раздел «Владение ресурсом»: какой вывод описывает семантику, а не предпочтение в оформлении?
Вопрос 21 из 30
Раздел «Границы применимости»: код использует границы применимости. Какой вывод останется верным при других допустимых входных данных?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Class ApiClientFactory
    Private ReadOnly client As HttpClient
    Public Sub New(client As HttpClient)
        Me.client = client
    End Sub
    Public Function CreateService() As ApiService
        Return New ApiService(client)
    End Function
End Class
Вопрос 22 из 30
Раздел «Границы применимости»: перед объединением правки нужно проверить один принцип. Какой именно?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Option Strict On
Namespace ReviewCase24_5
    Class ApiService
        Implements IDisposable

        Private ReadOnly client As HttpClient

        Public Sub New(client As HttpClient)
            Me.client = client
        End Sub

        Public Sub Dispose() Implements IDisposable.Dispose
            client.Dispose()
        End Sub
    End Class
End Namespace
Вопрос 23 из 30
Раздел «Границы применимости»: какое правило нельзя считать проверенным одним обычным примером?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Option Explicit On
Option Infer On
Namespace BoundaryCase24_5
    Class ApiClientFactory
        Private ReadOnly edgeClient As HttpClient
        Public Sub New(edgeClient As HttpClient)
            Me.edgeClient = edgeClient
        End Sub
        Public Function CreateService() As ApiService
            Return New ApiService(edgeClient)
        End Function
    End Class
End Namespace
Вопрос 24 из 30
Раздел «Границы применимости»: обычный сценарий в рабочем модуле проходит, но поведение ещё не закреплено проверкой. Какое решение не маскирует причину?
Вопрос 25 из 30
Какое правило по теме «Границы применимости» можно безопасно перенести из примера в реальный проект?
Вопрос 26 из 30
Раздел «Сопровождение проекта»: что здесь является частью контракта, а не особенностью одного удачного запуска?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Class ResourceOwnerTests
    <Fact>
    Public Sub DisposeCanBeCalledTwiceAfterFailure()
        Dim owner = New ResourceOwner(New FailingResource())
        Assert.Throws(Of IOException)(Sub() owner.Run())
        owner.Dispose()
        owner.Dispose()
    End Sub
End Class
Вопрос 27 из 30
Раздел «Сопровождение проекта»: какой вывод должен пережить рефакторинг этого фрагмента?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Option Strict On
Namespace ReviewCase24_6
    Class ResourceOwnerTests
        <Fact>
        Public Sub DisposeCanBeCalledTwiceAfterFailure()
            Dim reviewOwner = New ResourceOwner(New FailingResource())
            Assert.Throws(Of IOException)(Sub() reviewOwner.Run())
            reviewOwner.Dispose()
            reviewOwner.Dispose()
        End Sub
    End Class
End Namespace
Вопрос 28 из 30
Какое свойство механизма «Сопровождение проекта» нужно проверить на редком, но допустимом сценарии?
Visual Basic / VB.NETVisual Basic · IDisposable и управление ресурсами
Option Explicit On
Option Infer On
Namespace BoundaryCase24_6
    Class ResourceOwnerTests
        <Fact>
        Public Sub DisposeCanBeCalledTwiceAfterFailure()
            Dim edgeOwner = New ResourceOwner(New FailingResource())
            Assert.Throws(Of IOException)(Sub() edgeOwner.Run())
            edgeOwner.Dispose()
            edgeOwner.Dispose()
        End Sub
    End Class
End Namespace
Вопрос 29 из 30
Раздел «Сопровождение проекта»: какой подход сохраняет границу ответственности и делает отказ диагностируемым?
Вопрос 30 из 30
Раздел «Сопровождение проекта»: какое правило остаётся верным для современного Visual Basic?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу