Частные классы изолируют при компиляции?

Примите следующее: у нас есть класс B, который является частным классом, вложенным в классе A. Нет никакого класса, наследовавшегося классу B. Вопрос: компилятор автоматически отметит класс B как Изолированный? (NonInheritable в VB). Есть ли какое-либо серьезное основание для компилятора для не маркировки класса B, как изолировано?

Мой ход мыслей - это: так как класс B вкладывается в классе A и частный, и нет никакого другого класса, наследовавшегося классу B, должно быть безопасно изолировать его, потому что он не может быть наследован вне класса A (даже подклассами A).

Class A
    Private Class B  
    End Class
End Class
5
задан M.A. Hanin 25 March 2010 в 19:44
поделиться

2 ответа

Компилятор не будет автоматически помечать этот тип как герметичный.

Правда, в этом очень специфическом сценарии нет никакой реальной пользы в том, чтобы оставить класс незапечатанным. Однако определить, что вы находитесь в этом сценарии, не всегда так просто. Необходимо учитывать следующее

  • Тип является приватным
  • Необходимо учитывать наличие частичных классов
  • Другие приватные вложенные типы могут наследоваться.

Все это не невозможно вычислить, но и не тривиально. Гораздо дешевле попросить пользователя просто запечатать тип самостоятельно

7
ответ дан 14 December 2019 в 04:34
поделиться

Я не проверял, но полагаю, что он этого не сделает. В любом случае JIT может определить, может ли класс иметь потомков, так что я не ожидаю какой-либо разницы во время выполнения.

1
ответ дан 14 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

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