чайников - static c#



Что такое закрытый закрытый класс в C#? (4)

Я просматривал код C # для расширения поддержки языка в VS2010 (пример Ook). Я видел несколько классов, называемых internal sealed class

Что они делают? Можно ли их использовать?

Спасибо

https://src-bin.com


Answer #1

Внутренний означает, что элемент доступен для других типов, определенных в одной и той же сборке. Запечатанный класс - это своего рода противоположность абстрактного. Он может быть создан, но не может служить базовым классом. Основная причина, чтобы запечатать класс, состоит в том, чтобы препятствовать вашим пользователям возиться с ним и ломать его. Кроме того, уплотнение класса допускает определенные оптимизации компилятора, которые невозможны при использовании непечатанных классов.


Answer #2

Это класс, который:

  • internal : Доступ только изнутри сборки, которая определена (или сборки узлов).
  • sealed : не может быть унаследован.

Маркировка классов как internal - это способ предотвращения использования пользователями внешних пользователей. Это действительно форма инкапсуляции дизайна и ИМХО, это хорошая практика, чтобы отмечать типы, которые не являются частью предполагаемых общедоступных API-моделей, как internal . В долгосрочной перспективе это мешает пользователям вашей библиотеки связываться с типами, которые вы им не намеревались. Такое непреднамеренное соединение вредит вашей способности изменять и развивать способ реализации ваших библиотек, поскольку вы не можете их изменить, не разбирая своих клиентов. Использование internal помогает сохранить доступность публичной и полезной площади библиотеки до того, что предназначено.

Маркировка классов как sealed препятствует унаследованию этих классов. Это довольно решительный проект, который иногда полезен, если класс уже настолько специализирован, что разумно, чтобы никакие другие функции не добавлялись к нему через наследование либо напрямую, либо путем переопределения его поведения.

internal и sealed типы модификации по-разному, но они могут использоваться вместе.

NB У вас есть некоторый дополнительный контроль видимости internal поскольку вы можете определить набор других сборок как «друзей». Эти сборки для партнеров могут обращаться к вашим internal типам. Это может быть полезно для определения наборов взаимодействующих сборок, таких как сборка и испытания сборок. Часто желательно, чтобы тестовая сборка могла видеть все типы в тестируемой сборке.


Answer #3

internal sealed класс - это тот, который:

internal - доступен только из одной и той же сборки
sealed - невозможно подклассифицировать

Другими словами, вы не можете использовать его напрямую.


Answer #4
  • internal: класс, доступ к которому возможен только внутри одной сборки.

    Assembly1.dll:

    namespace test {
        internal class InternalClass {
        }
    
        public class PublicClass { 
        }
    } 

    Assembly2.dll:

    using test;
    ...
    InternalClass c1; // Error
    PublicClass c2; // OK
  • запечатанный: класс, который не может быть получен из

    sealed class SealedClass { ... }
    
    class ChildClass : SealedClass {} //ERROR




sealed