C-sharp

Från Rilpedia

Hoppa till: navigering, sök
Wikipedia_letter_w.pngTexten från svenska WikipediaWikipedialogo_12pt.gif
rpsv.header.diskuteraikon2.gif

C# (C-sharp) är ett objektorienterat programspråk utvecklat av Microsoft som del av .NET-plattformen. C# är ett objektorienterat språk baserat till stor del på de populära språken C och C++, programspråket C# har även en hel del gemensamt med Java.

C# är utvecklat av och utvecklas av Anders Hejlsberg.

Programkod skriven i C# omvandlas av en kompilator till så kallad MSIL-kod (Microsoft Intermediate Language), vilket är en sorts bytekod vilken sedan körs i en virtuell maskin, CLR (Common Language Runtime).

C# som programmeringsspråk är inte bundet till Microsoft Windows. Det finns åtminstone två olika fria implementationer av C#-kompilatorer, inom Mono och DotGNU-projekten.

Innehåll

Designmål

  • C# ska vara enkelt, modernt och objektorienterat.
  • Robusthet, beständighet och produktivitet är viktigt. Språket borde ha hög typsäkerhet, stoppa försök till att använda oinitierade variabler och automatisk skräpinsamling

Historik

Anders Hejlsberg rekryterades 1996 till Microsoft som arkitekt för Visual J++. Hejlsberg blev sedan chefsarkitekt för C#. C# utvecklades för att Microsoft vill ha ett språk som liknade Java, men som man självt ägde och som var inriktat mot Microsoft Windows, till skillnad från Java som är mer plattformsoberoende.

Version 1.2 av C# lämnades in till ECMA för standardisering och blev 2001 godkänt som ECMA-334. C# är även ISO-standardiserat som ISO/IEC 23270. Version 2.0 av C# släpptes i samband med version 2005 av Microsoft Visual Studio i november 2005. Version 3.0 släpptes i samband med .NET Framework 3.5 i november 2007

Funktioner

C# är det språk som är mest bundet till det underliggande Common Language Infrastructure (CLI). De flesta av de grundläggande datatyperna i C# motsvaras av värdetyper som stöds av de olika implementationerna av CLI. Specifikationen för C# tar dock aldrig upp några krav på kodgenerering: den säger inte att C# måste stödja en implementation av CLI, eller generera Common Intermediate Language-kod (eller CIL). En C#-kompilator skulle lika väl kunna generera vanlig maskinkod, som t.ex. C och FORTRAN. Men i praktiken genererar alla existerande implementationer CIL.

C# skiljer sig ifrån C och C++ på många sätt:

  • Det finns inga globala variabler eller funktioner. Det är dock möjligt att deklarera statiska variabler och funktioner/metoder inuti publika klasser för att uppnå samma resultat.
  • C# har en strikt boolesk typ, bool (alias för System.Boolean), som kan användas i villkorssatser (if, while etc.). Typen int (heltal) kan inte konverteras till en bool vilket är tillåtet i C resp. C++.
  • Minnesadresser kan refereras med pekare om de omsluts av ett kodblock (t.ex. en metod) som är märkt med nyckelordet unsafe. Pekare kan referera till värdetyper, vektorer och andra pekare. Annars är pekare inte tillgängliga för att de anses inte vara säkra. Klassen System.IntPtr är en wrapper runt en pekare som är tillåten inom säker kontext. De kan dock bara manipuleras.
  • Hanterat minne kan inte frias av programmeraren, däremot kan det samlas in av skräpinsamlaren. Man kan också bestämma ett objekts livslängd med en using-sats.
  • C# är mer typsäkert än C++.
  • Enumerations-medlemmar placeras i sitt eget namnutrymme.
  • C# har egenskaper.
  • Reflektion av typer stöds fullt ut.
  • C# har för närvarande (i C# 3.0) 77 reserverade ord.

Fördelar

  • Relativt lätt att lära sig – C#:s syntax liknar syntaxen i språk som C, C++ och Java. .NET innehåller ett stort kodbibliotek vilket förenklar vid utformning av komplexa system.
  • Flera användningsområden – C# kan både användas som kompilerat språk på en lokal dator och som språk i ASP.NET. Detta gör det enkelt att länka samman program på en klientdator med serverdatorers program.
  • Erbjuder enkel integration med andra Microsoft-baserade programvaror (OBS! Se även avsnittet Nackdelar för mer information om detta).
  • C#-kompilatorn kan användas utan licenser och speciella utvecklingsverktyg.

Nackdelar

  • Långsam programkörning – Tillämpningar skrivna i C# körs liksom javaprogram i en virtuell maskin vilket bl a innebär att programmet kompileras just innan det körs (se JIT-kompilering) vilket leder till en fördröjd uppstartsfas. Detta kan dock avhjälpas med verktyget ngen.exe som ingår i programsviten vilket förkompilerar MSIL-koden till maskinkod för aktuell processorarkitektur.

Programkodsexempel

Det klassiska "Hello, world!"-programmet i C#:

using System;
 
namespace HelloWorld
{
  class Hello
  {
    public static void Main()
    {
      Console.WriteLine("Hello World!");
    }
  }
}

Programmet matar efter kompilering och körning ut textsträngen "Hello World!".

If-sats i C#:

using System;
 
namespace If
{
  class If
   {
     public static void Main()
     {
       int Alderkalle;
       int Alderkajsa;
       Console.WriteLine("Hur gammal är Kalle?");
       Alderkalle = Convert.ToInt32(Console.ReadLine());
       Console.WriteLine("Hur gammal är Kajsa?");
       Alderkajsa = Convert.ToInt32(Console.ReadLine());
       if(Alderkalle > Alderkajsa)    //om Kalle är äldre än Kajsa
       {
          Console.WriteLine("Kalle är äldre än Kajsa");
       }
       else if(Alderkalle < Alderkajsa)    //om kalle är yngre än Kajsa
       {
          Console.WriteLine("Kalle är yngre än Kajsa");
       }
       else   //Inträffar om ingen av de ovanstående if-satserna inträffat
       {
          Console.WriteLine("Kalle är lika gammal som Kajsa");
       }
     }
   } 
}

Programmet frågar hur gamla Kajsa och Kalle är, sedan matar det ut en textsträng beroende på deras ålder.

Objekt i C#:

using System;
 
namespace CustomObject
{
  // Vår egna klass
  class Car
  {
    // Några variablar som tillhör klassen
    public string model;
    public int year;
 
    // Detta händer då ett nytt Car-objekt skapas
    public Car()
    {
      this.model = "";
      this.year = 0;
    }
  }
 
  class Main
  {
    public static void Main()
    {
      // Skapa ett nytt Car-objekt
      Car volvo = new Car();
      volvo.model = "Volvo Amazon";
      volvo.year = 1956;
 
      // Skrit ut bilmodellen i consolrutan
      Console.WriteLine("Modell: " + volvo.model);
      Console.WriteLine("År: " + volvo.year.ToString());
    }
  }
}

Programmet använder ett egengjort okjekt för att enkelt lagra information om bilar.

Referenser

Externa länkar


Personliga verktyg