What namespace will a class have if no namespace is defined

C#Namespaces

C# Problem Overview


In C#, if I create a class with no namespace, what namespace will I use when trying to instantiate the class?

For example, assume main is...

namespace NamespaceTests
{
	class Program
	{
		static void Main(string[] args)
		{

		}
	}
}

... and assume my namespace-less class is ...

public class test
{
	public string SayHello()
	{
		return "Hello World!";
	}
}

... and assume I have another class by the same name, but having the default namespace...

namespace NamespaceTests
{
	public class test
	{
		public string SayHello()
		{
			return "Hello Moon...";
		}
	}
}

... how would I modify main to include an instance of the namespace-less class and call 'SayHello' to retrieve the message "Hello World!"? Specifically, how would I fully qualify the namespace-less instance of class 'test', especially considering I may have another class also called 'test' but having a namespace, so I need to distinguish...

C# Solutions


Solution 1 - C#

It's in the global namespace and can be referenced like this:

var x = new global::test();

Solution 2 - C#

Types not defined within a namespace will be in the global namespace.

> 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. > > The following example shows how to use the global contextual keyword > to specify that the class TestApp is defined in the global namespace:

C# class TestClass : global::TestApp { }

Solution 3 - C#

In the addition to above answers, it is important to note, what all Type, regardless of its declaration location, has a "fully qualified name", which begins from "global::"

From "O'Relly. C# in a Nutshell":

All type names are converted to fully qualified names at compile time. Intermediate Language (IL) code contains no unqualified or partially qualified names

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
QuestionbarrypickerView Question on Stackoverflow
Solution 1 - C#David CrowellView Answer on Stackoverflow
Solution 2 - C#itsme86View Answer on Stackoverflow
Solution 3 - C#andreyk2 HohlovView Answer on Stackoverflow