SORU
22 Ocak 2009, PERŞEMBE


C# vs Java Numaralama (C yeni#)

Bir süre Java ile programlama yaptım ve sadece tamamen C ile yazılmış bir proje üzerine attırdı#. Deniyorum gelmek için hızlı C# ve fark çeteleler kullanılan çeşitli yerlerde benim yeni bir proje, ama ilk bakışta, C#'ın çeteleler gibi daha basit daha Java 1.5 uygulanması. Herkes C arasındaki farklar listeleyebilirsiniz# ve farklılıkların üstesinden nasıl Java çeteleler, ve? Yapmak için kullanılan (dil alev savaş başlatmak istemiyorum, ben sadece C bazı şeyler yapmak için nasıl bilmek istiyorum# Java). Örneğin, birisi bir C sonrası olabilir# Güneş ünlü Gezegen numaralama örneği mevkidaşı?

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

  private final double mass;   // in kilograms
  private final double radius; // in meters
  Planet(double mass, double radius) {
      this.mass = mass;
      this.radius = radius;
  }
  public double mass()   { return mass; }
  public double radius() { return radius; }

  // universal gravitational constant  (m3 kg-1 s-2)
  public static final double G = 6.67300E-11;

  public double surfaceGravity() {
      return G * mass / (radius * radius);
  }
  public double surfaceWeight(double otherMass) {
      return otherMass * surfaceGravity();
  }
}

// Example usage (slight modification of Sun's example):
public static void main(String[] args) {
    Planet pEarth = Planet.EARTH;
    double earthRadius = pEarth.radius(); // Just threw it in to show usage

    // Argument passed in is earth Weight.  Calculate weight on each planet:
    double earthWeight = Double.parseDouble(args[0]);
    double mass = earthWeight/pEarth.surfaceGravity();
    for (Planet p : Planet.values())
       System.out.printf("Your weight on %s is %f%n",
                         p, p.surfaceWeight(mass));
}

// Example output:
$ java Planet 175
Your weight on MERCURY is 66.107583
Your weight on VENUS is 158.374842
[etc ...]

CEVAP
24 Ocak 2011, PAZARTESİ


C# çeteleler extension methods tanımlayabilirsiniz ve bu eksik işlevselliği bazı yapar.

Bir numaralama Planet tanımlamak ve aynı zamanda uzatma yöntemleri surfaceGravity() surfaceWeight() eşdeğer olabilir.

Mikhail, önerdiği gibi özel öznitelikleri kullandım ama aynı Sözlüğü kullanarak elde edilebilir.

using System;
using System.Reflection;

class PlanetAttr: Attribute
{
    internal PlanetAttr(double mass, double radius)
    {
        this.Mass = mass;
        this.Radius = radius;
    }
    public double Mass { get; private set; }
    public double Radius { get; private set; }
}

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));
    }

}

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
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andytokkallos

    Andytokkallo

    27 Kasım 2007
  • FrankJavCee

    FrankJavCee

    29 Kasım 2008
  • sk8ingis4me

    sk8ingis4me

    16 Mart 2006