Частные классы закрываются при компиляции? - PullRequest
5 голосов
/ 25 марта 2010

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

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

Class A
    Private Class B  
    End Class
End Class

Ответы [ 2 ]

7 голосов
/ 25 марта 2010

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

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

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

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

1 голос
/ 25 марта 2010

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

...