C# > Language Features by Version > C# 6 to C# 12 Highlights > Global using Directives (C# 10)
Global using Directives in C# 10
C# 10 introduced global using directives, a powerful feature that simplifies code by automatically importing namespaces across your entire project. Instead of repeatedly adding using
statements at the top of each file, you can declare them once in a designated file, usually named `GlobalUsings.cs` or a similar convention. This significantly reduces boilerplate code and improves readability.
Basic Implementation
This code snippet demonstrates a typical `GlobalUsings.cs` file. The `global using` directives ensure that the `System`, `System.Collections.Generic`, `System.Linq`, and `System.IO` namespaces are available in every C# file within your project, without needing to declare them individually in each file.
// GlobalUsings.cs
global using System;
global using System.Collections.Generic;
global using System.Linq;
global using System.IO;
Concepts Behind the Snippet
The core idea is to centralize common namespace imports. This reduces redundancy and keeps your code cleaner. The compiler automatically includes these global usings during compilation, effectively prepending them to each file.
Real-Life Use Case Section
Consider a web application using ASP.NET Core. Many files will require the `System`, `System.Collections.Generic`, `System.Linq`, `System.Threading.Tasks`, and ASP.NET Core related namespaces like `Microsoft.AspNetCore.Mvc` and `Microsoft.Extensions.Logging`. Declaring these as global usings avoids repetitive `using` statements in every controller, service, and model class.
Best Practices
Interview Tip
Be prepared to discuss the advantages and disadvantages of global using directives. Mention the improved code readability and reduced boilerplate but also the potential for namespace pollution if overused.
When to Use Them
Use global using directives when you have a set of namespaces that are consistently used across a large portion of your project. They are particularly useful in ASP.NET Core, Entity Framework Core, and other projects where certain namespaces are ubiquitous.
Memory Footprint
Global using directives do not directly impact the memory footprint of your application at runtime. They are a compile-time feature that simplifies the development process. The compiler simply incorporates these namespaces as if they were explicitly declared in each file.
Alternatives
The traditional alternative is to include the `using` statements at the top of each file individually. While this provides explicit control, it can lead to repetitive code and reduced readability.
Pros
Cons
Conditional Global Usings
You can conditionally include global using directives based on compilation symbols. In this example, the `System.Diagnostics` namespace is only included in Debug builds.
// GlobalUsings.cs
#if DEBUG
global using System.Diagnostics;
#endif
global using System;
FAQ
-
Where should I put my GlobalUsings.cs file?
The file can be placed anywhere in your project, but it's a good practice to put it in the root directory or a dedicated folder (e.g., `Shared`). -
Can I use global using directives with aliases?
Yes, you can use global using directives with aliases. For example: `global using MyAlias = MyNamespace.MyClass;` -
Do global using directives affect performance?
No, global using directives are a compile-time feature and do not affect runtime performance.