💡 Инструкция: Выберите один ответ из пяти. На тест отведено 85 минут; после ответа можно открыть объяснение.
Вопрос 8 из 30
Раздел «Пользовательские атрибуты»: какое допущение стоит нарушить отдельно, чтобы проверка действительно ловила ошибку?
Visual Basic / VB.NET Visual 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
Зафиксировать ожидаемое поведение: пользовательский Attribute хранит декларативные метаданные и сам ничего не исполняет; потребитель обязан определить правила наследования, множественности и проверки значений.
Зафиксировать ожидаемое поведение: пользовательский Attribute не хранит декларативные метаданные и сам ничего не исполняет; потребитель обязан определить правила наследования, множественности и проверки значений.
Зафиксировать ожидаемое поведение: достаточно явно обеспечить «Пользовательский Attribute хранит декларативные метаданные и сам ничего не исполняет»; требование «потребитель обязан определить правила наследования, множественности и проверки значений» на поведение не влияет.
Зафиксировать ожидаемое поведение: при работе с Пользовательские атрибуты нарушение «Пользовательский Attribute хранит декларативные метаданные и сам ничего не исполняет» не меняет результат, если выполняется «потребитель обязан определить правила наследования, множественности и проверки значений».
Зафиксировать ожидаемое поведение: при ревью Пользовательские атрибуты поведение «потребитель обязан определить правила наследования, множественности и проверки значений» можно оставить вызывающему коду, если явно выражено «Пользовательский Attribute хранит декларативные метаданные и сам ничего не исполняет».
Вопрос 16 из 30
Раздел «Цена рефлексии»: что в этом коде определяет результат, а не случайное совпадение тестовых данных?
Visual Basic / VB.NET Visual 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
Наблюдаемое поведение: достаточно обеспечить «кэшировать следует проверенные метаданные»; условие «Рефлексия добавляет поиск, проверки, упаковку и сложность сопровождения» можно отдельно не проверять.
Наблюдаемое поведение: если GetMethod не нашёл член, безопаснее сохранить Nothing в кэше и продолжить работу, чем остановить построение метаданных.
Наблюдаемое поведение: рефлексия не добавляет поиск, проверки, упаковку и сложность сопровождения; кэшировать следует проверенные метаданные, а не скрывать ошибку поиска пустым результатом.
Наблюдаемое поведение: рефлексия добавляет поиск, проверки, упаковку и сложность сопровождения; кэшировать следует проверенные метаданные, а не скрывать ошибку поиска пустым результатом.
Наблюдаемое поведение: кэширование MethodInfo устраняет основную стоимость рефлексивного вызова, включая упаковку аргументов, проверки типов и Invoke.
Вопрос 17 из 30
Раздел «Цена рефлексии»: какой комментарий к изменению будет технически обоснован?
Visual Basic / VB.NET Visual 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
Не менять условие: если GetMethod не нашёл член, безопаснее сохранить Nothing в кэше и продолжить работу, чем остановить построение метаданных.
Не менять условие: достаточно обеспечить «кэшировать следует проверенные метаданные»; условие «Рефлексия добавляет поиск, проверки, упаковку и сложность сопровождения» можно отдельно не проверять.
Не менять условие: кэширование MethodInfo устраняет основную стоимость рефлексивного вызова, включая упаковку аргументов, проверки типов и Invoke.
Не менять условие: рефлексия добавляет поиск, проверки, упаковку и сложность сопровождения; кэшировать следует проверенные метаданные, а не скрывать ошибку поиска пустым результатом.
Не менять условие: рефлексия не добавляет поиск, проверки, упаковку и сложность сопровождения; кэшировать следует проверенные метаданные, а не скрывать ошибку поиска пустым результатом.
Вопрос 18 из 30
Раздел «Цена рефлексии»: для фрагмента с AccessorCache добавляют регрессионный тест. Какой контракт он должен защищать?
Visual Basic / VB.NET Visual 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
Проверить на границе: рефлексия не добавляет поиск, проверки, упаковку и сложность сопровождения; кэшировать следует проверенные метаданные, а не скрывать ошибку поиска пустым результатом.
Проверить на границе: достаточно обеспечить «кэшировать следует проверенные метаданные»; условие «Рефлексия добавляет поиск, проверки, упаковку и сложность сопровождения» можно отдельно не проверять.
Проверить на границе: если GetMethod не нашёл член, безопаснее сохранить Nothing в кэше и продолжить работу, чем остановить построение метаданных.
Проверить на границе: кэширование MethodInfo устраняет основную стоимость рефлексивного вызова, включая упаковку аргументов, проверки типов и Invoke.
Проверить на границе: рефлексия добавляет поиск, проверки, упаковку и сложность сопровождения; кэшировать следует проверенные метаданные, а не скрывать ошибку поиска пустым результатом.
Вопрос 19 из 30
Какое решение соответствует реальному времени жизни объектов и правилам «Цена рефлексии»?
Сделать явным правилом модуля: если GetMethod не нашёл член, безопаснее сохранить Nothing в кэше и продолжить работу, чем остановить построение метаданных.
Сделать явным правилом модуля: достаточно обеспечить «кэшировать следует проверенные метаданные»; условие «Рефлексия добавляет поиск, проверки, упаковку и сложность сопровождения» можно отдельно не проверять.
Сделать явным правилом модуля: рефлексия не добавляет поиск, проверки, упаковку и сложность сопровождения; кэшировать следует проверенные метаданные, а не скрывать ошибку поиска пустым результатом.
Сделать явным правилом модуля: кэширование MethodInfo устраняет основную стоимость рефлексивного вызова, включая упаковку аргументов, проверки типов и Invoke.
Сделать явным правилом модуля: рефлексия добавляет поиск, проверки, упаковку и сложность сопровождения; кэшировать следует проверенные метаданные, а не скрывать ошибку поиска пустым результатом.
Вопрос 20 из 30
Раздел «Цена рефлексии»: какой вывод можно использовать как основание для ревью кода?
Надёжное обобщение: рефлексия не добавляет поиск, проверки, упаковку и сложность сопровождения; кэшировать следует проверенные метаданные, а не скрывать ошибку поиска пустым результатом.
Надёжное обобщение: достаточно обеспечить «кэшировать следует проверенные метаданные»; условие «Рефлексия добавляет поиск, проверки, упаковку и сложность сопровождения» можно отдельно не проверять.
Надёжное обобщение: если GetMethod не нашёл член, безопаснее сохранить Nothing в кэше и продолжить работу, чем остановить построение метаданных.
Надёжное обобщение: рефлексия добавляет поиск, проверки, упаковку и сложность сопровождения; кэшировать следует проверенные метаданные, а не скрывать ошибку поиска пустым результатом.
Надёжное обобщение: кэширование MethodInfo устраняет основную стоимость рефлексивного вызова, включая упаковку аргументов, проверки типов и Invoke.