As the name implies File Scoped types restrict the usage of a type to the current file.
To use this feature a new modifier was introduced;
file. Applying this modifier to any type definition restrict its usage to the current file.
In the screenshot above you can see that I created a
File class in both the
FileReader.cs file and
FileWriter.cs file without any issues.
If I try to use this
File class outside these 2 files, I get an error:
Good to know:
filemodifier can be applied to
class, interface, record,
- It cannot be combined with another modifier like
When should I use this feature?
There are a few use cases I can think about where I see this feature useful:
- Code generation: Code generation is one of the places where naming collisions can easily occur. We typically solve this by using different namespaces With the file keyword it can make code generation a lot easier.
- Nested classes: One way I use to avoid naming collisions is through private nested classes. Here the file keyword can be a cleaner alternative.
What is happening behind the scenes?
To have a look at what is happening behind the scenes, I opened the compiled code in dotPeek:
As you can see above, the C# compiler renames the types to avoid naming collisions.