title: J Sharp
text: J# (uitgesproken als J sharp) is Microsofts implementatie van Suns Java. J# is in feite een kopie van Java, zodat het voor Java-programmeurs eenvoudig is hun bestaande Java-applicaties over te zetten naar het .NET-framework. Dit geldt echter niet voor gebruikte Java-utilityklassen. Het sterke van J# is dat het zowel met Java bytecode (door de compiler gegenereerde code die wordt uitgevoerd door een virtuele machine) als met Java-broncode zelf overweg kan. Dit eerste is een groot voordeel als de originele broncode niet (meer) beschikbaar is.
  
  Er is voor J# minder achtergrondinformatie voorhanden dan voor C# of VB.NET. J# heeft echter toegang tot alle functionaliteit die in de CLR (Common Language Runtime) geboden wordt. Als er slechts Java bytecode hoeft worden uitgevoerd, dan is IKVM.NET (een Java-framework dat boven op het .NET-framework draait) een goed alternatief.
  
  Verschillen tussen J# en Java 
  In het algemeen is de syntaxis hetzelfde, maar er zijn in J# bepaalde aanpassingen gedaan om de functionaliteit van .NET te ondersteunen. Standaard ondersteunt Java geen property's; om toch deze functionaliteit te bieden moeten getters en setters in J# aan bepaalde voorwaarden voldoen.
  
  Voorbeeld van een klasse met een setter en een getter:
  
   public class property
   {
      private String naam;
  
      /** @property
      */
      public void set_Naam(String naam)
      {
         this.naam = naam;
      }
  
      /** @property
      */
      public String get_Naam()
      {
         return this.naam;
      }
   }
  Zoals hierboven moet een property voorzien zijn van het sleutelwoord property in Javadoc-stijl, dus met een @ ervoor. Verder moeten de functies beginnen met get_ en set_, en moet de variabelenaam zoals die gebruikt wordt in de functie verschillen met de variabele naam zoals die binnen de klasse gedefinieerd is. De namen van de functies die bij dezelfde property horen, moeten hetzelfde zijn om lees- en schrijffunctionaliteit te verkrijgen, maar om een property bijvoorbeeld alleen-lezen te maken kan de setter weggelaten worden.
  
  Een aantal verschillen met Java zijn dat J# niet compileert naar Java-bytecode, dat het ontwikkelen van Java-applets niet wordt ondersteund, en ook niet de mogelijkheid om Java-applets uit te voeren in een webbrowser. Als laatste worden de Java Native Interface en de Raw Native Interface vervangen door P/Invoke, en wordt het gebruik van remote method invocation niet ondersteund.
  
  Voorbeelden 
  Indien een priemgetal, geef de delers weer:
  private void button1_Click(Object sender, System.EventArgs e)
  {
        boolean priem = true;
        String strGetal, delers = "";
        double dblGetal;
        int deler = 2;
  
        // Inlezen van tekstbox
        textBox1.SelectAll();
        strGetal = textBox1.get_SelectedText();
        dblGetal = System.Convert.ToDouble(strGetal);
  	
  	// Werkwijze :
  	// we delen het getal door een deler.
  	// Indien de rest van deze deling 0 is, hebben we niet te
  	// maken met een priemgetal en onthouden we de deler.
  	// We voeren dit uit voor delers gaande van 2 tot de helft
  	// van het deeltal.
  	// indien we op het einde nog steeds geen rest = 0 hebben
  	// gevonden, is het een priemgetal
        while (deler <= dblGetal / 2) {
        	double rest = dblGetal % deler;
              if (rest == 0) {
              	priem = false;
                  delers += System.Convert.ToString(deler) + ", ";
              }
              deler++;
   	}
  
        if (priem) {
              label2.set_Visible(false);
              label3.set_Visible(true);
              label4.set_Visible(true);
              delers = "De delers zijn 1, " + strGetal;
              label4.set_Text(delers);
        } else {
              label2.set_Visible(true);
              label3.set_Visible(true);
              label4.set_Visible(true);
              delers = "De delers zijn 1, " + delers + strGetal;
        	label4.set_Text(delers);
        }
    }
  
  Programmeertaal