Я искал код С# для расширения языковой поддержки в VS2010 (пример Ook). Я видел некоторые классы, названные internal sealed class
Что они делают? Можно ли их использовать?
Я искал код С# для расширения языковой поддержки в VS2010 (пример Ook). Я видел некоторые классы, названные internal sealed class
Что они делают? Можно ли их использовать?
Это класс, который:
internal
: Доступ к нему возможен только в пределах установленной сборки (или сборок друг друга).sealed
: Не удается наследовать.Маркировка классов как internal
- это способ предотвращения использования пользователями внешних пользователей сборки. Это действительно форма инкапсуляции дизайна и IMHO. Хорошей практикой является маркировка типов, которые не являются частью предполагаемых общедоступных API-моделей\объектов в качестве internal
. В долгосрочной перспективе это мешает пользователям вашей библиотеки связываться с типами, которые вы им не намеревались. Такое непреднамеренное соединение вредит вашей способности изменять и развивать способ реализации ваших библиотек, поскольку вы не можете их изменить, не разбирая своих клиентов. Использование internal
помогает сохранить общедоступную и полезную площадь поверхности библиотеки до того, что предполагается.
Маркировка классов как sealed
предотвращает наследование этих классов. Это довольно решительный проект, который иногда полезен, если класс уже настолько специализирован, что разумно, что никакая другая функциональность не должна добавляться к нему через наследование либо напрямую, либо путем переопределения его поведения.
internal
и sealed
изменять типы по-разному, но их можно использовать вместе.
NB У вас есть еще один контроль области видимости internal
, поскольку вы можете определить набор других сборок как "друзей". Эти сборки друзей могут получить доступ к вашим типам internal
. Это может быть полезно для определения наборов взаимодействующих сборок, таких как сборка и испытания сборок. Часто желательно, чтобы тестовая сборка могла видеть все типы в тестируемой сборке.
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
Внутренний означает, что элемент доступен для других типов, которые определены в одной и той же сборке. Запечатанный класс - это своего рода противоположность абстрактного. Он может быть создан, но не может служить базовым классом. Основная причина, чтобы запечатать класс, состоит в том, чтобы препятствовать вашим пользователям возиться с ним и ломать его. Это также тот случай, что уплотнение класса допускает определенные оптимизации компилятора, которые невозможны с непечатаемыми классами.
Класс internal sealed
- это тот, который:
internal
- Доступно только из одной и той же сборки sealed
- Не может быть подклассом
Другими словами, вы не можете использовать его напрямую.
Внутренний означает, что он может использоваться только в той же сборке,
Внутреннее ключевое слово - это доступ модификатор для типов и типов. Внутренние типы или члены доступный только в файлах в та же сборка
запечатанный, который не может быть унаследован
Запечатанный класс не может быть унаследован. Это является ошибкой использования закрытого класса в качестве базовый класс. Используйте запечатанный модификатор в объявление класса для предотвращения наследование класса.
Я думаю, если вы хотите знать, что это