>  기사  >  Java  >  C#과 Java 열거형은 어떻게 다릅니까?

C#과 Java 열거형은 어떻게 다릅니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-02 01:07:02406검색

How Do C# and Java Enums Differ?

C#과 Java 열거형의 차이점 이해

C#을 처음 접하는 사람으로서 열거형을 많이 활용하는 코드베이스를 탐색하는 것은 어려울 수 있으며, 특히 강력한 Java 배경 지식을 갖춘 사람이라면 더욱 그렇습니다. . 이 문서의 목적은 C#과 Java 열거형 간의 차이점을 이해하여 격차를 해소하고 C# 열거형의 잠재력을 최대한 활용할 수 있도록 하는 것입니다.

주요 차이점

  • 단순한 성격 C# 열거형: Java 1.5 열거형과 달리 C# 열거형은 구현이 더 간단합니다. 주로 명명된 상수 집합을 정의하는 메커니즘으로 사용되지만 Java에 있는 고급 기능은 없습니다.
  • 확장 메서드: 제한된 기능을 보완하기 위해 C#에서는 확장 메서드를 도입합니다. 기본 정의를 수정하지 않고도 열거형에 사용자 정의 기능을 추가할 수 있습니다.

C에서 유명한 Planet Enum 예제 구현

C# 열거형 및 확장 메서드의 실제 적용을 설명하기 위해 다음을 살펴보겠습니다. Sun의 Java 문서에 사용된 상징적인 Planet 열거형 예제를 자세히 살펴보세요.

<code class="csharp">using System;

public enum Planet
{
    [PlanetAttr(3.303e+23, 2.4397e6)] MERCURY,
    [PlanetAttr(4.869e+24, 6.0518e6)] VENUS,
    [PlanetAttr(5.976e+24, 6.37814e6)] EARTH,
    [PlanetAttr(6.421e+23, 3.3972e6)] MARS,
    [PlanetAttr(1.9e+27, 7.1492e7)] JUPITER,
    [PlanetAttr(5.688e+26, 6.0268e7)] SATURN,
    [PlanetAttr(8.686e+25, 2.5559e7)] URANUS,
    [PlanetAttr(1.024e+26, 2.4746e7)] NEPTUNE,
    [PlanetAttr(1.27e+22, 1.137e6)] PLUTO
}

public static class Planets
{
    public static double GetSurfaceGravity(this Planet p)
    {
        return G * GetMass(p) / (GetRadius(p) * GetRadius(p));
    }

    public static double GetSurfaceWeight(this Planet p, double otherMass)
    {
        return otherMass * p.GetSurfaceGravity();
    }

    public const double G = 6.67300E-11;

    private static double GetMass(Planet p) => GetAttr(p).Mass;

    private static double GetRadius(Planet p) => GetAttr(p).Radius;

    private static PlanetAttr GetAttr(Planet p) =>
        (PlanetAttr)Attribute.GetCustomAttribute(ForValue(p), typeof(PlanetAttr));

    private static MemberInfo ForValue(Planet p) =>
        typeof(Planet).GetField(Enum.GetName(typeof(Planet), p));
}</code>

이 C# 구현에서는 다음을 수행합니다.

  • 사용자 정의 속성은 다음을 사용하는 대신 열거형 멤버에 메타데이터를 연결하는 데 사용됩니다. Java 예제에서와 같이 클래스를 분리합니다.
  • 확장 메서드 GetSurfaceGravity 및 GetSurfaceWeight는 Planet 열거형에서 직접 액세스할 수 있는 편의성이 추가된 Java 메서드와 동일한 기능을 제공합니다.
  • ForValue 메서드는 지정된 열거형 값에 해당하는 필드를 사용하여 리플렉션을 통해 속성 검색을 활성화합니다.

C#의 확장 메서드를 활용하면 열거형의 기능을 확장하여 이전에 Java의 보다 강력한 열거형 구현으로 처리했던 사용 사례를 처리할 수 있습니다. 이를 통해 C#에서 원활한 전환과 효과적인 코딩이 가능합니다.

위 내용은 C#과 Java 열거형은 어떻게 다릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.