C # 네임 스페이스-요점은 무엇입니까?
C # 언어에 대해 더 많이 배우려고 노력했지만 다음과 같은 네임 스페이스를 사용하는 상황을 볼 수 없습니다.
using someOtherName = System.Timers.Timer;
그것은 언어를 이해하는 데 더 많은 혼란을 더할 것입니다. 설명해 주시겠습니까?
감사합니다
이것은 스페이스 네임이 아니라 음성 형식입니다. 예를 들어 다음과 같이 명확하게하는 것이 유용합니다.
using WinformTimer = System.Windows.Forms.Timer;
using ThreadingTimer = System.Threading.Timer;
(ps : ;-p Timer
를 선택해 주셔서 감사합니다 )
일치 하는 경우, 당신은 모두를 사용하는 경우 System.Windows.Forms.Timer
와 System.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.Control
와 System.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
'IT' 카테고리의 다른 글
Vim에서 변수 이름 변경 (0) | 2020.09.11 |
---|---|
Chrome의 개발자 도구에는없는 Firebug의 기능은 무엇입니까? (0) | 2020.09.11 |
두 번 허용 속성을 만드는 방법 (0) | 2020.09.11 |
Ajax를 사용하여 PDF 파일 다운로드 및 열기 (0) | 2020.09.11 |
Java 주석에서 코드의 위치 섹션을 표시하는 방법은 무엇입니까? (0) | 2020.09.11 |