C Sharp 3.0

Úr Wikipediu, frjálsa alfræðiritinu

C# 3.0 var hleypt af stokkunum 19. nóvember 2007 og er byggt ofaná C# 2.0. Það eru kynntar nokkrar viðbætur við málið sem eru byggðar ofaná C# 2.0 til að styðja við notkun á fallaforritun, vinsæl fallforitunarmál eru MON LISP, ML og Haskel. Einnig er nýtt í 3.0 Language Integrated Query (LINQ). LINQ er ein leið til að skilgreina eða gera fyrirspurnir á gögn. C# 3.0 inniheldur eftirfarandi viðbætur:

Nafnlausar týpur (Anonymous Types)[breyta | breyta frumkóða]

Nafnlausar týpur eru ekki skilgreindar sem ákveðnir klasar. Þegar þú býrð til nafnlausa týpu mun þýðandinn búa til klasa fyrir þig. Nafnlaus týpa erfir beint frá object. Innihaldið í nafnlausu týpunni er röð af les/skrif eiginleikum (property) þar sem þýðandinn sér um að frumstilla nafnlausu breyturnar.

  var x = new { Property1 = "hello", Property2 = 5 };
  Console.WriteLine(x.Property1);
  Console.WriteLine(x.Property2.ToString());

Óbein týpa af breytu (Implicitly Typed Local Variables)[breyta | breyta frumkóða]

Skilgreining á óbeinni týpu af breytu er ályktuð frá segðinni sem er notuð til að skilgreina breytuna. Þegar staðtengd breyta er skilgreind með "var" sem týpu þá er hún skilgreind sem óbein týpa af breytu. Dæmi:

   var i = 5;
  var s = "Hello";
  var d = 1.0;
  var numbers = new int[] {1, 2, 3};
  var orders = new Dictionary<int,Order>();

Þessar óbeint skilgreindu breytur eru nákvæmlega eins og eftirfarandi skilgreining:

  int i = 5;
  string s = "Hello";
  double d = 1.0;
  int[] numbers = new int[] {1, 2, 3};
  Dictionary<int,Order> orders = new Dictionary<int,Order>();

Hlut frumstillir (Object Initializer)[breyta | breyta frumkóða]

Í C# 2.0 þegar það þurftir að búa til hlut og setja stöðu á hann varða að fjölbinda (overload) smiðinn og setja breyturnar úr smiðnum. Í C# 3.0 er hægt að gera þetta á nýjan hátt.

C# 2.0:

  MyClass c = new MyClass();
  c.Prop = "asdads";

C# 3.0:

  MyClass c = new MyClass { Prop = "test" };

Óbeinar fylkis týpur (Implicitly Typed Arrays)[breyta | breyta frumkóða]

Óbeinar fylkis týpu framsemsetningar eru gerðar með því að þeir liðir sem eru í fylkinu eru ályktaðir út frá þeim liðum sem eru í fylkinu.

Eftirfarandi eru skilgreiningar á óbeinum týpum af fylki:

  var a = new[] { 1, 10, 100, 1000 };            // int[]
  var b = new[] { 1, 1.5, 2, 2.5 };            // double[]
  var c = new[] { "hello", null, "world" };      // string[]
  var d = new[] { 1, "one", 2, "two" };         // Error

Viðbótaraðgerðir (Extenstion Methods)[breyta | breyta frumkóða]

Hægt er að bæta við aðgerðum við aðra klasa, eins og að bæta við string týpuna aðgerð. Strengja týpan er í System.dll og þú hefur ekki aðgang þar inn að kóða en hægt er að skilgreina viðbótaraðgerð þar inn. Aðgerðin eða fallið verður að vera skilgreint sem static fall í static klasa.

Dæmi um þetta:

  static class StrenjaVidbot
  {
     public static string BaetaNafniVidStreng(this string value)
     {
        return value + " Jónsson";
     }
   }

Svo er hægt að nota þetta á þessa leið:

   String strName = "Jón"
   Console.WriteLine(strName.AppendMyNameToString());

Lambda-framsetning (Lambda Expressions)[breyta | breyta frumkóða]

Lamda-framsetning er hnitmiðuð framsetning til að skrifa nafnlausar aðgerðir sem geta innihaldið segðir og staðhæfingar. Allar lambda segðir nota virkjann => . Vinstra megin eru skilgreindar þær breytur sem eru notaðar í inntaki og á hægri hlið er framsetningin eða skilgreining á aðgerðinni.

Í C# 2.0 voru kynntar nafnlausar aðgerðir, hér er dæmi um eina:

   public delegate int MinDelegate(int n);
   class NafnlausAdgerð
   {
      static void Main()
      {
         // Nafnlaus aðgerð sem skilar margfeldi með 10
         MinDelegate delegHlutur = new MinDelegate( delegate(int n) { return n * 10; } );
        // Skrifa útkomnuna:
        Console.WriteLine("Útkoman er: {0}", delegHlutur(5));
     }
   }

Lamda-framsetningin í C# 3.0

   public delegate int MinDelegate(int n);
   class LambdaFrams
   {
      static void Main()
      {
          // Nafnlaus aðgerð sem skilar margfeldi með 10
          MinDelegate Hlut1= new MinDelegate( delegate(int n) { return n * 10; } );
          // Skrifa útkomuna:
          Console.WriteLine("Útkoman í 2.0: {0}", Hlut1(5));
          // Lambda framsetning:
          MinDelegate Hlut2 = (int n) => n * 10;
          // Eða:
          // MyDelegate Hlut2 = n => n * 10;
          // Skrifa útkomuna:
          Console.WriteLine("Lambda útkoman: {0}", Hlut2(5));
          Console.ReadLine();
      }
   }

Fyrirspurnarframsetning (Query expressions)[breyta | breyta frumkóða]

Núna er hægt að nota fyrirspurnir svipaðar og eru í vensluðum gagnagrunnum eins og SQL og XQuery, málið er kallað Language Integrated Query eða (LINQ). Eitt af aðalmarkmiðum C# 3.0 var einmitt að auðvelda vinnu með gögn og að nálgast gagnagruna á auðveldari hátt.

Þetta dæmi prentar lista af öllum vörum sem eru uppseldar. Fyrirspurnin velur hvert stak úr vörulistanum þar sem "UnitsInStock" er jafnt og 0.

  public void Linq2() {
      List products = GetProductList();
      var soldOutProducts =
          from p in products
          where p.UnitsInStock == 0
          select p;
    
      Console.WriteLine("Sold out products:");
      foreach (var product in soldOutProducts) {
          Console.WriteLine("{0} is sold out!", product.ProductName);
    }
  }

Heimildir[breyta | breyta frumkóða]

  • „C# Version 3.0 Specification“. Sótt 19. mars 2008.
  • „Overview of C# 3.0“. Sótt 19. mars 2008.
  • „Restriction Operators“. Sótt Sótt 19. mars 2008.
  • „C# 3.0 New Language Features (Part 2)“. Sótt 19. mars 2008.
  • „Concepts behind the C# 3.0 language“. Sótt Sótt 19. mars 2008.
  • „C# 3.0 Features“. Sótt 19. mars 2008.
  • Fyrirmynd greinarinnar var „C Sharp (programming language)“ á ensku útgáfu Wikipedia. Sótt 19. mars 2008.mars 2008