> 백엔드 개발 > C++ > C# 및 Java 열거형: Java에서와 같이 C# 열거형에 기능을 어떻게 추가합니까?

C# 및 Java 열거형: Java에서와 같이 C# 열거형에 기능을 어떻게 추가합니까?

Mary-Kate Olsen
풀어 주다: 2025-01-12 07:37:43
원래의
725명이 탐색했습니다.

C# vs. Java Enums: How Do I Add Functionality to C# Enums Like in Java?

C# 및 Java 열거: 차이 분석

Java에서 C#으로 전환하는 개발자의 경우 두 언어의 열거형 간의 차이점을 이해하는 것이 중요합니다. C# 열거형은 보기에는 깔끔해 보이지만 처음에는 Java의 일부 고급 기능이 부족합니다.

주요 차이점

  • 생성자 매개변수: Java 열거형에는 생성자 매개변수가 있어 추가 데이터로 초기화할 수 있습니다. C# 열거형에는 생성자가 없습니다.
  • 메서드 및 속성: Java 열거형에는 메서드와 속성이 포함될 수 있습니다. C# 열거형은 메서드나 속성을 직접 정의할 수 없으며 확장 메서드로 정의해야 합니다.
  • 주석 동일: Java에서는 주석을 사용하여 메타데이터를 열거형과 연결할 수 있습니다. C#에서 사용자 지정 특성에는 비슷한 기능이 있습니다.

차이 해소

  • 확장 메서드: C# 확장 메서드는 Java 열거 메서드 및 속성의 기능을 제공합니다.
  • 사용자 정의 속성: C# 사용자 정의 속성은 열거형 값 옆에 추가 데이터를 저장하는 데 사용할 수 있습니다.

C#의 Java Planet 열거 예제

다음 C# 코드는 확장 메서드 및 사용자 정의 속성을 포함하여 Sun's Planet 열거형의 동등한 구현을 보여줍니다.

<code class="language-csharp">using System;
using System.Reflection;

namespace PlanetEnum
{
    public static class Planets
    {
        public static double GetSurfaceGravity(this Planet p)
        {
            PlanetAttr attr = GetAttr(p);
            return G * attr.Mass / (attr.Radius * attr.Radius);
        }

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

        public const double G = 6.67300E-11;

        private static PlanetAttr GetAttr(Planet p)
        {
            return (PlanetAttr)Attribute.GetCustomAttribute(ForValue(p), typeof(PlanetAttr));
        }

        private static MemberInfo ForValue(Planet p)
        {
            return typeof(Planet).GetField(Enum.GetName(typeof(Planet), p));
        }
    }

    [AttributeUsage(AttributeTargets.Field)]
    public class PlanetAttr : Attribute
    {
        public PlanetAttr(double mass, double radius)
        {
            Mass = mass;
            Radius = radius;
        }

        public double Mass { get; private set; }
        public double Radius { get; private set; }
    }

    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
    }
}</code>
로그인 후 복사

이 코드는 확장 메소드와 사용자 정의 속성을 사용하여 추가 기능으로 C# 열거형을 확장하고 Java 열거형과의 격차를 효과적으로 메우는 방법을 보여줍니다.

위 내용은 C# 및 Java 열거형: Java에서와 같이 C# 열거형에 기능을 어떻게 추가합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿