Why use the global keyword in C#?

C#.NetNamespacesGlobal

C# Problem Overview


I would like to understand why you might want to use the global:: prefix. In the following code, ReSharper is identifying it as redundant, and able to be removed:

alt text

C# Solutions


Solution 1 - C#

The keyword global:: causes the compiler to bind names starting in the global namespace as opposed to in the current context. It's needed in places where a bindable member exists in a given context that has the same name as a global one and the global one is desired.

For example

class Test {
  class System {}
  public void Example() {
    System.Console.WriteLine("here"); // Error since System binds to Test.System
    global::System.Console.WriteLine("here"); // Works
}

The corresponding MSDN page has a few more examples (including the one above)

Solution 2 - C#

It is best to use the global namespace prefix in generated code. This is done to avoid situations where a similar named type exists in your namespace.

If you create a type named System.Diagnostics.DebuggerNonUserCodeAttribute inside your namespace you will notice that ReSharper no longer says that the global:: is not needed. The code generator simply wants to avoid any collisions with the names of your own types.

Solution 3 - C#

> "The global contextual keyword, when it comes before the :: operator, refers to the global namespace, which is the default namespace for any C# program and is otherwise unnamed."

Source: https://msdn.microsoft.com/en-us/library/cc713620.aspx

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPaul FryerView Question on Stackoverflow
Solution 1 - C#JaredParView Answer on Stackoverflow
Solution 2 - C#Martin LiversageView Answer on Stackoverflow
Solution 3 - C#Shami QureshiView Answer on Stackoverflow