[c#] C # 네임 스페이스 별칭-요점은 무엇입니까?

언제 어디서나 다음과 같은 네임 스페이스 별칭을 사용할 것입니다.

 using someOtherName =  System.Timers.Timer;

그것은 언어를 이해하는 데 더 많은 혼란을 더할 것 같습니다.



답변

이는 네임 스페이스 별칭이 아니라 형식 별칭입니다. 예를 들어 다음과 같이 명확하게하는 것이 유용합니다.

using WinformTimer = System.Windows.Forms.Timer;
using ThreadingTimer = System.Threading.Timer;

(ps : Timer;-p를 선택해 주셔서 감사합니다 )

그렇지 않으면, 당신은 모두를 사용하는 경우 System.Windows.Forms.TimerSystem.Timers.Timer동일한 파일에 당신은 전체 이름 (때문에주는 유지해야 할 것 Timer혼동 될 수있다).

또한 extern다른 어셈블리의 동일한 정규화 된 형식 이름을 가진 형식을 사용하기위한 별칭이 있는 역할도합니다. 드물지만 지원하면 유용합니다.


실제로 다른 용도를 볼 수 있습니다. 유형에 대한 빠른 액세스를 원하지만 using충돌하는 확장 메서드를 가져올 수 없기 때문에 일반을 사용하고 싶지 않을 때 … 약간 복잡하지만 … 여기에 예가 있습니다. …

namespace RealCode {
    //using Foo; // can't use this - it breaks DoSomething
    using Handy = Foo.Handy;
    using Bar;
    static class Program {
        static void Main() {
            Handy h = new Handy(); // prove available
            string test = "abc";
            test.DoSomething(); // prove available
        }
    }
}
namespace Foo {
    static class TypeOne {
        public static void DoSomething(this string value) { }
    }
    class Handy {}
}
namespace Bar {
    static class TypeTwo {
        public static void DoSomething(this string value) { }
    }
}


답변

충돌하는 하위 네임 스페이스 및 / 또는 개체 이름이있는 여러 네임 스페이스가있을 때 사용합니다. [예시로]와 같은 작업을 수행 할 수 있습니다.

using src = Namespace1.Subspace.DataAccessObjects;
using dst = Namespace2.Subspace.DataAccessObjects;

...

src.DataObject source = new src.DataObject();
dst.DataObject destination = new dst.DataObject();

그렇지 않으면 작성해야 할 것입니다.

Namespace1.Subspace.DataAccessObjects.DataObject source =
  new Namespace1.Subspace.DataAccessObjects.DataObject();

Namespace2.Subspace.DataAccessObjects.DataObject dstination =
  new Namespace2.Subspace.DataAccessObjects.DataObject();

그것은 많은 타이핑을 절약하고 코드를 훨씬 더 읽기 쉽게 만드는 데 사용할 수 있습니다.


답변

언급 된 예제 외에도 제네릭 유형을 반복적으로 참조 할 때 유형 별칭 (네임 스페이스 별칭이 아닌)이 유용 할 수 있습니다.

Dictionary<string, SomeClassWithALongName> foo = new Dictionary<string, SomeClassWithALongName>();

private void DoStuff(Dictionary<string, SomeClassWithALongName> dict) {}

대:

using FooDict = Dictionary<string, SomeClassWithALongName>;

FooDict foo = new FooDict();

private void DoStuff(FooDict dict) {}


답변

짧음.

유형 이름을 공유하는 네임 스페이스간에 명확성을 제공하는 부가적인 이점이 있지만 본질적으로 그것은 단지 설탕 일뿐입니다.


답변

이런 상황에서 항상 사용합니다

using Utility = MyBaseNamespace.MySubNamsepace.Utility;

여기서 Utility, 그렇지 않으면 (같은 다른 컨텍스트를 것 MyBaseNamespace.MySubNamespace.MySubSubNamespace.Utility),하지만 난 기대 / 선호 Utility하는 하나 개의 특정 클래스에 항상 점.


답변

포함 된 여러 네임 스페이스에 동일한 이름을 가진 여러 클래스가있는 경우 매우 유용합니다. 예를 들면 …

namespace Something.From.SomeCompanyA {
    public class Foo {
        /* ... */
    }
}

namespace CompanyB.Makes.ThisOne {
    public class Foo {
        /* ... */
    }
}

별칭을 사용하여 컴파일러를 행복하게 만들고 자신과 팀의 다른 사람들에게 더 명확한 정보를 제공 할 수 있습니다.

using CompanyA = Something.From.CompanyA;
using CompanyB = CompanyB.Makes.ThisOne;

/* ... */

CompanyA.Foo f = new CompanyA.Foo();
CompanyB.Foo x = new CompanyB.Foo();


답변

모든 네임 스페이스에 대해 네임 스페이스 별칭을 정의했습니다. 이렇게하면 클래스의 출처를 매우 쉽게 알 수 있습니다. 예 :

using System.Web.WebControls;
// lots of other using statements

// contains the domain model for project X
using dom = Company.ProjectX.DomainModel;
// contains common web functionality
using web = Company.Web;
// etc.

// User from the domain model
dom.User user = new dom.User();
// Data transfer object
dto.User user = new dto.User();
// a global helper class
utl.SomeHelper.StaticMethod();
// a hyperlink with custom functionality
// (as opposed to System.Web.Controls.HyperLink)
web.HyperLink link = new web.HyperLink(); 

별칭의 이름을 지정하고 모든 사람이 사용하는 방법에 대한 몇 가지 지침을 정의했습니다.