Namespace
Peponi │ 12/11/2024 │ 3m
C#
SyntaxKeywordNamespace
Namespace
12/11/2024
3m
Peponi
C#
SyntaxKeywordNamespace
1. Introduction
namespace 키워드는 코드를 구성하는 고유한 전역 형식을 선언하는 데 사용한다. 모든 namespace는 암시적으로 public이며 한정자를 적용할 수 없다.
namespace 내에는 다음과 같은 형식을 선언할 수 있다.
2. Example
namespace Foo
{
class Bar { }
namespace Nested
{
class MyClass { }
}
}namespace는 partial 형식과 마찬가지로 여러 파일에 나누어 선언할 수 있다.
namespace Foo
{
class Bar { }
}namespace Foo
{
namespace Nested
{
class MyClass { }
}
}상기 File2.cs의 선언은 아래의 선언과 동일하다.
namespace Foo.Nested
{
class MyClass { }
}3. File scoped namespace
C# 10 버전 이상에서는 파일 단위 namespace 선언이 가능하다.
namespace Foo;
class Bar { }상기 예시와 같이 namespace를 선언하게 되면 File1.cs에 있는 모든 코드는 Foo namespace에 속하는 것으로 간주되며 여러 파일에 걸쳐 적용할 수도 있다.
namespace Foo;
class Bar { }namespace Foo;
class MyClass { }한편 file scoped namespace 선언은 nested를 허용하지 않는다. 아래와 같은 namespace 선언은 파일 단위 네임스페이스에서는 불가능하다.
namespace Foo;
class Bar { }
namespace Nested; // CS8954
namespace Nested { } // CS89554. Default namespace
모든 네임스페이스의 최상위 요소에는 컴파일러가 추가한 기본 네임스페이스가 있다. Console project에 추가되는 ConsoleApp namespace, WinForms project에 기본으로 추가되는 WinFormsApp namespace 등은 모두 기본 네임스페이스 아래에 있다.
using System;
// default namespace (Global)
public class DefaultNSClass
{
public void Write() => Console.WriteLine("Hello, World!");
}
namespace ConsoleApp1
{
internal class Program
{
private static void Main(string[] args)
{
DefaultNSClass defaultNSClass = new DefaultNSClass();
defaultNSClass.Write();
}
}
}using System;
namespace ConsoleApp2
{
internal class Program
{
private static void Main(string[] args)
{
// Don't need to declare 'using ~'
DefaultNSClass defaultNSClass = new DefaultNSClass();
defaultNSClass.Write();
}
}
}