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

Reflection и атрибуты

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

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На тест отведено 85 минут; после ответа можно открыть объяснение.
Вопрос 1 из 30
Какой контракт действительно соблюдает показанный фрагмент из раздела «Метаданные типов»?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Module Demo
    Function PublicMethods(t As Type) As IEnumerable(Of String)
        Return t.GetMethods(BindingFlags.Public Or BindingFlags.Instance).
                 Select(Function(m) m.Name).
                 Distinct()
    End Function
End Module
Вопрос 2 из 30
Раздел «Метаданные типов»: какой комментарий к изменению будет технически обоснован?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Option Strict On
Namespace ReviewCase22_1
    Module Demo
        Function PublicMethods(t As Type) As IEnumerable(Of String)
            Return t.GetMethods(BindingFlags.Public Or BindingFlags.Instance).
                     Select(Function(m) m.Name).
                     Distinct()
        End Function
    End Module
End Namespace
Вопрос 3 из 30
Раздел «Метаданные типов»: что изменится первым при нарушении ключевого допущения этого фрагмента?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Option Explicit On
Option Infer On
Namespace BoundaryCase22_1
    Module Demo
        Function PublicMethods(t As Type) As IEnumerable(Of String)
            Return t.GetMethods(BindingFlags.Public Or BindingFlags.Instance).
                     Select(Function(m) m.Name).
                     Distinct()
        End Function
    End Module
End Namespace
Вопрос 4 из 30
Какое решение соответствует реальному времени жизни объектов и правилам «Метаданные типов»?
Вопрос 5 из 30
Какое утверждение точнее отделяет «Метаданные типов» от соседних механизмов?
Вопрос 6 из 30
Посмотрите на фрагмент по теме «Пользовательские атрибуты». Какое объяснение точнее всего связывает код с его поведением?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
<AttributeUsage(AttributeTargets.Class, AllowMultiple:=False, Inherited:=True)>
Class HandlerAttribute
    Inherits Attribute
    Public ReadOnly Property Name As String
    Public Sub New(name As String)
        Me.Name = name
    End Sub
End Class
Вопрос 7 из 30
Раздел «Пользовательские атрибуты»: какой комментарий к изменению будет технически обоснован?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Option Strict On
Namespace ReviewCase22_2
    <AttributeUsage(AttributeTargets.Class, AllowMultiple:=False, Inherited:=True)>
    Class HandlerAttribute
        Inherits Attribute
        Public ReadOnly Property Name As String
        Public Sub New(reviewName As String)
            Me.Name = reviewName
        End Sub
    End Class
End Namespace
Вопрос 8 из 30
Раздел «Пользовательские атрибуты»: какое допущение стоит нарушить отдельно, чтобы проверка действительно ловила ошибку?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Option Explicit On
Option Infer On
Namespace BoundaryCase22_2
    <AttributeUsage(AttributeTargets.Class, AllowMultiple:=False, Inherited:=True)>
    Class HandlerAttribute
        Inherits Attribute
        Public ReadOnly Property Name As String
        Public Sub New(edgeName As String)
            Me.Name = edgeName
        End Sub
    End Class
End Namespace
Вопрос 9 из 30
Какое решение соответствует реальному времени жизни объектов и правилам «Пользовательские атрибуты»?
Вопрос 10 из 30
Раздел «Пользовательские атрибуты»: какое обобщение не зависит от случайных деталей показанного примера?
Вопрос 11 из 30
Раздел «Динамический вызов методов»: что здесь является частью контракта, а не особенностью одного удачного запуска?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Module Demo
    Function Invoke(instance As Object, methodName As String, args() As Object) As Object
        Dim method = instance.GetType().GetMethod(methodName)
        If method Is Nothing Then Throw New MissingMethodException(methodName)
        Return method.Invoke(instance, args)
    End Function
End Module
Вопрос 12 из 30
Раздел «Динамический вызов методов»: на ревью предлагают упростить участок с Invoke. Какое замечание защищает поведение программы, а не стиль записи?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Option Strict On
Namespace ReviewCase22_3
    Module Demo
        Function Invoke(reviewInstance As Object, reviewMethodName As String, args() As Object) As Object
            Dim reviewMethod = reviewInstance.GetType().GetMethod(reviewMethodName)
            If reviewMethod Is Nothing Then Throw New MissingMethodException(reviewMethodName)
            Return reviewMethod.Invoke(reviewInstance, args)
        End Function
    End Module
End Namespace
Вопрос 13 из 30
Раздел «Динамический вызов методов»: какое утверждение поможет отличить настоящий дефект от случайности тестовых данных?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Option Explicit On
Option Infer On
Namespace BoundaryCase22_3
    Module Demo
        Function Invoke(edgeInstance As Object, edgeMethodName As String, args() As Object) As Object
            Dim edgeMethod = edgeInstance.GetType().GetMethod(edgeMethodName)
            If edgeMethod Is Nothing Then Throw New MissingMethodException(edgeMethodName)
            Return edgeMethod.Invoke(edgeInstance, args)
        End Function
    End Module
End Namespace
Вопрос 14 из 30
Раздел «Динамический вызов методов»: как уменьшить риск дефекта, не подменяя причину запасным значением?
Вопрос 15 из 30
Какое правило по теме «Динамический вызов методов» можно безопасно перенести из примера в реальный проект?
Вопрос 16 из 30
Раздел «Цена рефлексии»: что в этом коде определяет результат, а не случайное совпадение тестовых данных?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Class AccessorCache
    Private ReadOnly cache As New ConcurrentDictionary(Of Type, PropertyInfo())
    Public Function GetProperties(t As Type) As PropertyInfo()
        Return cache.GetOrAdd(t, Function(x) x.GetProperties(BindingFlags.Public Or BindingFlags.Instance))
    End Function
End Class
Вопрос 17 из 30
Раздел «Цена рефлексии»: какой комментарий к изменению будет технически обоснован?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Option Strict On
Namespace ReviewCase22_4
    Class AccessorCache
        Private ReadOnly cache As New ConcurrentDictionary(Of Type, PropertyInfo())
        Public Function GetProperties(t As Type) As PropertyInfo()
            Return cache.GetOrAdd(t, Function(x) x.GetProperties(BindingFlags.Public Or BindingFlags.Instance))
        End Function
    End Class
End Namespace
Вопрос 18 из 30
Раздел «Цена рефлексии»: для фрагмента с AccessorCache добавляют регрессионный тест. Какой контракт он должен защищать?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Option Explicit On
Option Infer On
Namespace BoundaryCase22_4
    Class AccessorCache
        Private ReadOnly cache As New ConcurrentDictionary(Of Type, PropertyInfo())
        Public Function GetProperties(t As Type) As PropertyInfo()
            Return cache.GetOrAdd(t, Function(x) x.GetProperties(BindingFlags.Public Or BindingFlags.Instance))
        End Function
    End Class
End Namespace
Вопрос 19 из 30
Какое решение соответствует реальному времени жизни объектов и правилам «Цена рефлексии»?
Вопрос 20 из 30
Раздел «Цена рефлексии»: какой вывод можно использовать как основание для ревью кода?
Вопрос 21 из 30
Какой вывод о фрагменте по теме «Профилирование решения» технически обоснован?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Module Benchmark
    Sub Measure(items As Object())
        Dim watch = Stopwatch.StartNew()
        For Each item In items
            Dim name = CStr(item.GetType().GetProperty("Name").GetValue(item))
        Next
        Console.WriteLine(watch.ElapsedTicks)
    End Sub
End Module
Вопрос 22 из 30
Раздел «Профилирование решения»: какую договорённость важнее сохранить, чем выиграть несколько строк кода?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Option Strict On
Namespace ReviewCase22_5
    Module Benchmark
        Sub Measure(reviewItems As Object())
            Dim reviewWatch = Stopwatch.StartNew()
            For Each reviewItem In reviewItems
                Dim reviewName = CStr(reviewItem.GetType().GetProperty("Name").GetValue(reviewItem))
            Next
            Console.WriteLine(reviewWatch.ElapsedTicks)
        End Sub
    End Module
End Namespace
Вопрос 23 из 30
Раздел «Профилирование решения»: обычный сценарий проходит. Что следует закрепить отдельным граничным тестом?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Option Explicit On
Option Infer On
Namespace BoundaryCase22_5
    Module Benchmark
        Sub Measure(edgeItems As Object())
            Dim edgeWatch = Stopwatch.StartNew()
            For Each edgeItem In edgeItems
                Dim edgeName = CStr(edgeItem.GetType().GetProperty("Name").GetValue(edgeItem))
            Next
            Console.WriteLine(edgeWatch.ElapsedTicks)
        End Sub
    End Module
End Namespace
Вопрос 24 из 30
Раздел «Профилирование решения»: как уменьшить риск дефекта, не подменяя причину запасным значением?
Вопрос 25 из 30
Раздел «Профилирование решения»: какой вывод описывает семантику, а не предпочтение в оформлении?
Вопрос 26 из 30
Раздел «Архитектурные компромиссы»: что в этом коде определяет результат, а не случайное совпадение тестовых данных?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Interface IMessageHandler
    Sub Handle(message As Object)
End Interface
Class HandlerRegistry
    Public Function Discover(assembly As Reflection.Assembly) As IEnumerable(Of Type)
        Return assembly.GetTypes().Where(Function(t) GetType(IMessageHandler).IsAssignableFrom(t) AndAlso Not t.IsAbstract)
    End Function
End Class
Вопрос 27 из 30
Раздел «Архитектурные компромиссы»: какое ограничение нельзя убрать только потому, что обычный пример проходит?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Option Strict On
Namespace ReviewCase22_6
    Interface IMessageHandler
        Sub Handle(reviewMessage As Object)
    End Interface
    Class HandlerRegistry
        Public Function Discover(reviewAssembly As Reflection.Assembly) As IEnumerable(Of Type)
            Return reviewAssembly.GetTypes().Where(Function(t) GetType(IMessageHandler).IsAssignableFrom(t) AndAlso Not t.IsAbstract)
        End Function
    End Class
End Namespace
Вопрос 28 из 30
Раздел «Архитектурные компромиссы»: обычный сценарий проходит. Что следует закрепить отдельным граничным тестом?
Visual Basic / VB.NETVisual Basic · Reflection и атрибуты
Option Explicit On
Option Infer On
Namespace BoundaryCase22_6
    Interface IMessageHandler
        Sub Handle(edgeMessage As Object)
    End Interface
    Class HandlerRegistry
        Public Function Discover(edgeAssembly As Reflection.Assembly) As IEnumerable(Of Type)
            Return edgeAssembly.GetTypes().Where(Function(t) GetType(IMessageHandler).IsAssignableFrom(t) AndAlso Not t.IsAbstract)
        End Function
    End Class
End Namespace
Вопрос 29 из 30
Раздел «Архитектурные компромиссы»: что стоит закрепить в коде и тестах, а не прикрывать общим обработчиком?
Вопрос 30 из 30
Какое правило по теме «Архитектурные компромиссы» можно безопасно перенести из примера в реальный проект?

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

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

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

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