I was looking through some C# code for extending language support in VS2010 (Ook example). I saw some classes called internal sealed class
What do these do? Would one use them?
Thanks
I was looking through some C# code for extending language support in VS2010 (Ook example). I saw some classes called internal sealed class
What do these do? Would one use them?
Thanks
Internal means it can be used only in same assembly,
sealed that can't be inherited
It is a class that:
internal
: Can only be accessed from within the assembly it is defined (or friend assemblies).sealed
: Cannot be inherited.Marking classes as
internal
is a way of preventing outside users of an assembly from using them. It's really a form of design encapsulation and IMHO it is good practice to mark types that are not part of the intended public API\object models asinternal
. In the long term this prevents users of your library from coupling themselves to types which you did not intend them to. This sort of unintended coupling harms your ability to change and evolve the way your libraries are implemented as you cannot change them without breaking your clients. Usinginternal
helps to keep the public and usable surface area of a library down to what is intended.Marking classes as
sealed
prevents these classes from being inherited. This is a pretty drastic design intent which is sometimes useful if a class is already so specialized that it is sensible that no other functionality should be added to it via inheritance either directly or via overriding its behaviour.internal
andsealed
modify types in quite different ways, but they can be used together.NB You have some further scoping control of
internal
as you can define a set of other assemblies as 'friends'. These friend assemblies may access yourinternal
types. This can be useful for defining sets of co-operating assemblies such as production and test assemblies. It is often desirable that a test assembly can see all the types in the assembly it is testing.An
internal sealed
class is one that is:internal
- Only accessible from within the same assemblysealed
- Cannot be subclassedIn other words, there's no way for you to use it directly.
Internal means the member is accessible to other types that are defined in the same assembly. A Sealed class is sort of the oppositie of abstract. It can be instantiated but cannot serve as a base class. The primary reason to seal a class is to prevent your users from fiddling around with it and breaking it. It’s also the case that sealing a class permits certain compiler optimizations that are not possible with non-sealed classes.
internal: A class which can only be accessed inside the same assembly.
Assembly1.dll:
Assembly2.dll:
sealed: A class which cannot be derived from