C# 팁: 모호성을 피하기 위해 별칭 사용 정의

7881 단어 csharpdotnet
다른 네임스페이스나 패키지에서 제공되지만 이름은 같은 클래스나 서비스를 참조해야 할 수 있습니다. 어떤 참조가 특정 유형을 참조하는지 이해하기 어려울 수 있습니다.

예, 클래스의 정규화된 이름을 사용할 수 있습니다. 또는 네임스페이스 별칭을 사용하여 더 깔끔하고 이해하기 쉬운 코드를 작성할 수 있습니다.
using 문을 수정하기만 하면 됩니다. 방법을 보자!

일반적인 접근법



NuGet 패키지를 사용하여 다양한 소스에서 축구 경기에 대한 정보를 수신한 다음 일부 비즈니스 규칙을 따르도록 데이터를 조작하는 애플리케이션에서 작업 중이라고 가정해 보겠습니다.

ShinyData 및 JuanStatistics 서비스(완전히 임의의 이름!)는 모두 Match라는 객체를 제공합니다. 물론 이러한 개체는 특정 네임스페이스에 있습니다.

네이티브 구현을 사용하고 있으므로 모호성을 피하기 위해 클래스 이름을 바꿀 수 없습니다. 따라서 다음과 같은 코드로 끝납니다.

void Main()
{
    var shinyMatch = new ShinyData.Football.Statistics.Match();
    var juanMatch = new JuanStatistics.Stats.Football.Objects.Match();
}


정규화된 네임스페이스를 매번 작성하면 쉽게 지루해질 수 있습니다. 코드의 가독성도 떨어집니다!

다행히 우리는 2가지 솔루션을 가지고 있습니다. 또는 두 가지 다른 방법으로 적용할 수 있는 솔루션입니다.

네임스페이스 별칭 - 보다 깨끗한 솔루션



다음 솔루션은 작동하지 않습니다.

using ShinyData.Football.Statistics;
using JuanStatistics.Stats.Football.Objects;

void Main()
{
    var shinyMatch = new Match();
    var juanMatch = new Match();
}


물론 컴파일러는 shinyMatchjuanMatch 의 정확한 유형을 이해할 수 없기 때문입니다.

그러나 C#의 멋진 기능인 네임스페이스 별칭을 사용할 수 있습니다. 이는 가져온 네임스페이스의 이름을 지정하고 별칭을 사용하여 관련 클래스를 참조할 수 있음을 의미합니다.

전체 네임스페이스에 별칭 사용




using Shiny = ShinyData.Football.Statistics;
using Juan = JuanStatistics.Stats.Football.Objects;

void Main()
{
    var shinyMatch = new Shiny.Match();
    var juanMatch = new Juan.Match();
}


이 간단한 트릭은 코드의 가독성을 높입니다.

특정 클래스에 별칭 사용



한 걸음 더 나아갈 수 있을까요? 예! 특정 클래스에 대한 별칭을 지정할 수도 있습니다!

using ShinyMatch = ShinyData.Football.Statistics.Match;
using JuanMatch = JuanStatistics.Stats.Football.Objects.Match;

void Main()
{
    var shinyMatch = new ShinyMatch();
    var juanMatch = new JuanMatch();
}


이제 ShinyMatch 문 사이에 나열된 별칭이므로 using 유형인 ShinyData.Football.Statistics.Match 인스턴스를 만들 수 있습니다.

제네릭의 별칭 정의



간단한 클래스를 지정하는 데 사용할 수 있을 뿐만 아니라 제네릭에만 사용할 수 있습니다.

ShinyData 네임스페이스가 CustomDictionary<T> 와 같은 일반 클래스를 정의한다고 가정합니다. 이전과 동일하게 참조할 수 있습니다!

using ShinyMatch = ShinyData.Football.Statistics.Match;
using JuanMatch = JuanStatistics.Stats.Football.Objects.Match;
using ShinyDictionary = ShinyData.Football.Statistics.CustomDictionary<int>;

void Main()
{
    var shinyMatch = new ShinyMatch();
    var juanMatch = new JuanMatch();

    var dictionary = new ShinyDictionary();
}


불행하게도 몇 가지 제한 사항이 있습니다.
  • 항상 제네릭의 내부 유형을 지정해야 합니다. CustomDictionary<int>는 유효하지만 CustomDictionary<T>는 유효하지 않습니다
  • .
  • 정규화된 이름
  • 을 사용하지 않는 한 별칭CustomDictionary<ShinyMatch>으로 정의된 클래스를 내부 유형으로 사용할 수 없습니다.

    결론



    네임스페이스 별칭을 정의하여 C# 코드를 단순화하는 방법을 살펴보았습니다. using 문에서 가져온 네임스페이스에 이름을 추가하고 코드에서 참조하기만 하면 됩니다.

    네임스페이스 또는 특정 클래스 중 무엇을 참조하시겠습니까?

    👉 토론하거나 아래 댓글 섹션에서 논의합시다.

    🐧

    좋은 웹페이지 즐겨찾기