"using"지시문과 "using"문이 C #에서 동일한 키워드를 사용하는 이유는 무엇입니까?


10

using지시문 은 정규화 된 이름을 사용하지 않고 유형에 액세스 할 수있게합니다.

using MyNamespace.Foo.Bar;

using문장 은 객체가 올바르게 처리되도록 try/ finally블록에 대한 구문 설탕 역할 을합니다.

using(var x = new MyDisposableClass()) { ... }

이 두 상황은 서로 관련이없는 것 같습니다. 동일한 키워드를 사용하는 이유는 무엇입니까?

두 사람이 혼란스러워하는 것은 의심의 여지가 있지만 새로운 기능에 대한 새로운 단어를 만들지 않는 것이 이상합니다.


옆으로, 나는 classC ++에서 의 이중 사용 (클래스 선언 용, 템플릿 매개 변수 정의용) 에 대해 읽었 지만 두 번째 경우에는 결국 자체 키워드를 얻었 typename습니다.

답변:


7

두 가지 용도는 using서로 관련이 없습니다.

그러나 using두 경우 모두 에 사용해야 할 몇 가지 이유가 있습니다 .

  • using문장은 .NET 1.0 용으로 작성되었으며 의미 상 의미가 있습니다 ( "다음 네임 스페이스에서이 네임 스페이스를 사용하고 있습니다").
  • 두 경우 모두 using의미 적으로 이해됩니다. 일반 영어에서는 using네임 스페이스이거나 using선언 된 일회용 개체입니다.
  • using키워드 를 오버로드함으로써 언어 디자이너는 해당 언어로 다른 예약어를 만들 필요가 없었습니다. 언어를 더 깨끗하게 유지하는 데 도움이됩니다.

다시 한 번 언어 디자이너가 import네임 스페이스 선언에 두 가지 선택을 명확하게 하기 위해 사용하도록 선택했을 수 있습니다 ( using일회용 객체는 이후 버전의 .NET으로 제공됨). 우리는 결코 알지 못할 것이며 문맥 상 사용하는 두 가지 의미 중 어느 것이 매우 명확하기 때문에 중요하지 않습니다.

이 모든 것을 말 했으므로 using MyNamespace.DisposableObject = DisposableObject;네임 스페이스 별칭으로 코드를 어지럽히 지 마십시오 .


감사. "언어를 깨끗하게 유지하는 데 도움이됩니다"라는 의미로 확장 할 수 있습니까? 내 생각에 키워드를 오버로드하면 언어가 덜 깨끗해집니다. 새로운 키워드를 만들고 별도의 기능을 위해 별도의 키워드를 사용하는 것이 더 깨끗하다고 ​​생각합니다.
eigenchris

5
키워드는 식별자로 사용할 수 없습니다. 새 키워드를 도입하면 해당 키워드를 식별자로 사용하는 모든 프로그램이 중단됩니다. 독점 소스 코드, 비밀 소스 코드, 군사 소스 코드 등을 포함하여 C♯의 전체 역사에 기록 된 모든 소스 코드 라인에 액세스 할 수있는 경우에만 역 호환 가능한 방식으로 키워드를 도입 할 수 있습니다.
Jörg W Mittag

@ JörgWMittag, 완전히 사실이 아닙니다. C #에는 해당 이름의 기존 식별자가 코드와 충돌하지 않는 방식으로 추가 된 문맥 키워드가 많이 있습니다. var범위 내 유형 var의 키워드가 키워드보다 우선 하는 전형적인 예 입니다.
David Arno

@ JörgWMittag 또는 대안으로 컴파일러의 언어 버전을 선택 가능하게 만들 g++ --std=c++11거나 (예 : 소스 파일에서 방언을 지정하도록 허용 (하스켈 (?), 라켓, 펄, 심지어 파이썬)) 언어를 설계 할 수도 있습니다. 일부 식별자를 예약하지 않고 키워드가 가능한 식별자와 구문 적으로 충돌하지 않는 방식 (앞에 렉서가있는 LALR 파서를 사용하여 방대한 언어 구현이 어려울 수 있음)
amon

1
@eigenchris 항상 @ 앞에 @를 붙여서 다음과 같은 식별자로 사용할 수 있습니다.@using
Bill Tür

4

언어 디자이너는 일반적으로 키워드 수를 제한하려고합니다. 키워드가 예약되면 사용자 코드에서 식별자로 사용할 수 없으므로 필요한 단어 일 경우 성가신 일입니다. 다른 언어에서 코드를 포팅 할 때도 방해가됩니다. Microsoft는 사람들이 Java에서 C #으로 코드를 포팅하기를 원했습니다. C #에는 Java보다 많은 키워드가 있지만 각각의 새 키워드로 인해 더 어려워집니다. 또한 .net 언어는 동일한 키워드를 갖지 않을 수있는 다른 언어로 작성된 API와 상호 작용하도록 설계되어 공개 멤버도 키워드 인 경우 성가심을 유발합니다.

using구문의 위치에 나타나기 때문에 두 가지 용도 는 모호하지 않습니다. "사용"은 두 경우 모두에 적합한 용어입니다. 따라서 동일한 키워드를 재사용하는 것이 좋습니다. 키워드 재사용의 다른 예를 참고하십시오.

  • new 일반적인 제약에서
  • in에서 foreach와 변형 유형의 매개 변수
  • defaultswitch과 연산자 ( default(T))로
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.