정리가 필요한 카테고리(추후 정리)/C#,Unity

C#] namespace 규칙

TwinParadox 2017. 1. 9. 19:54
728x90

1. 범위


바깥 namespace에서 선언된 name은 안쪽의 namespace에서 name을 한정하지 않고 사용 가능함.


namespace Outer
{
	class ClassEx1 {}
	namespace Inner
	{
		class ClassEx2 : ClassEx1 {}
	}
}


namespace 계통 구조의 다른 가지에 있는 형식을 지칭하는 경우,

부분적으로 한정된 name을 사용할 수 있음.


namespace Outer
{
	namespace InnerOne
	{
		class Base1 {}
	}
	namespace InnerTwo
	{
		class Base2 : InnerOne.Base1{}
	}
}



2. 숨기기


안쪽 namespace와 바깥쪽 namespace에 같은 name이 있는 경우 안쪽 name으로 간주됨.

이를 원치 않을 경우, 해당 namespace에 명시하여 name을 한정해야할 필요가 있음.

이는 컴파일 시점에 모든 name이 완전 한정되기 때문이며,

따라서 IL Code 상에서 한정되지 않은 이름이나 부분적으로 한정된 이름은 존재하지 않음.


namespace Outer
{
	class Class1 {}

	namespace Inner
	{
		class Class1 {}
		
		class Test
		{
			Class1 c1; // Outer.Inner.Class1
			Outer.Class1 c2; // Outer.Class1
		}
	}
}



3. 중복된 선언


중복하여 선언하는 것이 가능함.

단 namespace 내부의 형식이 충돌해서는 안 됨.

이를 이용하면, 이미 선언된 namespace에도 언제든 새로운 형식을 추가할 수 있음.

각자 다른 어셈블리로 컴파일되는 서로 다른 두 소스 파일에서도 이런 식으로 namespace 선언 가능


namespace Outer
{
	class Class1 {}
}
namespace Outer
{
	class Class2 {}
}




4. 중첩된 using 지시자


namespace 안에 using 지시자를 중첩할 수 있음.

한 namespace 선언 안에서 using 지시자로 도입한 name의 경우, namespace 선언 안에서만 유효함.

유효 범위 밖에서 name을 사용하는 경우 컴파일 단계에서 오류 발생.


namespace Space1
{
	class Class1 {}
}
namespace Space2
{
	using Space1;
	class Class2 : Class1 {}
}
namespace Space2
{
	class Class3 : Class1 {} // 오류
}


728x90