IT

C # 네임 스페이스-요점은 무엇입니까?

lottoking 2020. 9. 11. 08:15
반응형

C # 네임 스페이스-요점은 무엇입니까?


C # 언어에 대해 더 많이 배우려고 노력했지만 다음과 같은 네임 스페이스를 사용하는 상황을 볼 수 없습니다.

 using someOtherName =  System.Timers.Timer;

그것은 언어를 이해하는 데 더 많은 혼란을 더할 것입니다. 설명해 주시겠습니까?

감사합니다


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

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

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

일치 하는 경우, 당신은 모두를 사용하는 경우 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(); 

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


어떤면에서는 Visual Studio에서 코딩하는 동안 정말 편리합니다.

사용 사례 : 예 SqlConnection들어 네임 스페이스에서 몇 개의 클래스 만 사용했다고 가정 해 보겠습니다 System.Data. 일반적인 과정에서는 System.Data.SqlClient아래와 같이 * .cs 파일의 맨 위에 네임 스페이스를 가져옵니다 .

using System.Data;

이제 내 지능을보세요. 코드 편집기에서 입력하는 동안 선택할 수있는 많은 클래스로 크게 확산되었습니다. 나는 모든 클래스를 전혀 사용하지 않을 것입니다.

여기에 이미지 설명 입력

따라서 * .cs 파일 상단에 별칭을 사용하고 명확한 인텔리전스 뷰를 얻습니다.

using SqlDataCon = System.Data.SqlClient.SqlConnection

이제 내 지능적인 관점을보십시오. 그것은 매우 깨끗하고 매우 깨끗합니다.

여기에 이미지 설명 입력


단위 테스트에서 별칭이 매우 유용하다고 생각합니다. 단위 테스트를 작성할 때 테스트 할 주제를 다음과 같이 선언하는 것이 일반적입니다.

MyClass myClassUT;

myClassUT주제 U 파인더 T의 정적 방법과 정적 클래스에 대한 쓰기 단위 테스트하려는 경우 추정. 그러나? 그런 다음 다음과 같은 별칭을 만들 수 있습니다.

using MyStaticClassUT = Namespace.MyStaticClass;

그런 다음 다음과 같이 단위 테스트를 작성할 수 있습니다.

public void Test()
{
    var actual = MyStaticClassUT.Method();
    var expected = ...
}

그리고 당신은 테스트 대상이 무엇인지 결코 놓치지 않습니다.


내가 아는 한 가지 이유는 가져온 네임 스페이스에서 이름 충돌이있을 때 더 짧은 이름을 사용할 수 있습니다. 예:

당신이 선언 된 경우 using System.Windows.Forms;using System.Windows.Input;동일한 파일에 액세스에 갈 때 ModifierKeys당신은 이름이 사실을 발견했습니다 ModifierKeys모두에 System.Windows.Forms.ControlSystem.Windows.Input네임 스페이스. 선언에 의한 그래서 using Input = System.Windows.Input;당신은 다음 얻을 수 있습니다 System.Windows.Input.ModifierKeys통해 Input.ModifierKeys.

나는 C # 버프는 아니지만 별칭 네임 스페이스는 나에게 "최상의 사례"처럼 보인다. 이렇게하면 무엇을 받고 있는지 알면서도 너무 많이 입력 할 필요가 없습니다.

참고 URL : https://stackoverflow.com/questions/505262/c-sharp-namespace-alias-whats-the-point

반응형