microsoft .net framework 2.0

24
Microsoft .NET Framework 2.0 Novosti v sintaksi C# Miha Markič, MVP C# RIGHTHAND .net svetovanje in razvoj www.rthand.com , [email protected]

Upload: annalise-alexander

Post on 30-Dec-2015

50 views

Category:

Documents


0 download

DESCRIPTION

Microsoft .NET Framework 2.0. Novosti v sintaksi C#. Miha Markič, MVP C# RIGHT HAND . net svetovanje in razvoj www.rthand.com , [email protected]. Agenda. Generiki “Nullable types” Iteratorji Popravi in nadaljuj Anonimne metode Druge izboljšave. Okvirjanje/Razokvirjanje. Boxing/Unboxing - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Microsoft .NET Framework 2.0

Microsoft .NET Framework 2.0

Novosti v sintaksi C#

Miha Markič, MVP C#RIGHTHAND .net svetovanje in razvoj

www.rthand.com, [email protected]

Page 2: Microsoft .NET Framework 2.0

Agenda

Generiki “Nullable types” Iteratorji Popravi in nadaljuj Anonimne metode Druge izboljšave

Page 3: Microsoft .NET Framework 2.0

Okvirjanje/Razokvirjanje

Boxing/Unboxing Skoraj vse je objekt Izjema so vrednostni tipi

Optimizacija Prehod iz spremenljivke v objekt je okvirjanje Obraten prehod je razokvirjanje

Page 4: Microsoft .NET Framework 2.0

Okvirjanje

Kako deluje

100

int

100

int i = 100;

object o = i;

o

i

i (okvirjen)

Počasno.

Sklad Kopica

Page 5: Microsoft .NET Framework 2.0

Okvirjanje

Oba procesa sta počasna Izogibajte se jih, če se da Hkrati pa, vedno naletimo na njih Primer: zbirke

ArrayList al = new ArrayList();al.Add(4);al.Add(6);

Page 6: Microsoft .NET Framework 2.0

Generiki

Niso tista zdravila, vendar so vseeno zdravila Efikasnost

Zmanjšajo potrebno okvirjanje/razokviranje Zmanjšan nered kode (tipizirane zbirke) Manjše število napak (type safety)

Page 7: Microsoft .NET Framework 2.0

Primer generika

Page 8: Microsoft .NET Framework 2.0

Generiki

Kako delujejo? Popolna integracija v CLR Vrednostni generični tipi se generirajo v času

izvajanja, ne prevajanja Vrednostni generični tipi generirajo različno

procesorsko kodo za različne vrednostne tipe List<int> List<long>

Referenčni generični tipi delijo kodo Interna reprezentacija je enaka, referenca je

konstantno dolga

Page 9: Microsoft .NET Framework 2.0

Generiki Tipski parametri se lahko pripišejo

Razredom, strukturam, vmesnikom in delegatom

class Dictionary<K,V> {…}

struct HashBucket<K,V> {…}

interface IComparer<T> {…}

delegate R Function<A,R>(A arg);Dictionary<string,Customer> customerLookupTable;

Dictionary<string,List<Order>> orderLookupTable;

Dictionary<string,int> wordCount;

Page 10: Microsoft .NET Framework 2.0

Generiki

Tipski parametri se lahko pripišejo Metodam

class Utils{ public static T[] CreateArray<T>(int size) { return new T[size]; }

public static void SortArray<T>(T[] array) { … }}

string[] names = Utils.CreateArray<string>(3);names[0] = "Jones";names[1] = "Anderson";names[2] = "Williams";Utils.SortArray(names);

Page 11: Microsoft .NET Framework 2.0

Generiki

Tipski parametri imajo lahko omejitve Preprečimo uporabo “nezaželenih” tipov where T:

struct class new() razred vmesnik

class Dictionary<K,V>: IDictionary<K,V> where K: IComparable<K> where V: IKeyProvider<K>, new(){ …}

Page 12: Microsoft .NET Framework 2.0

Generiki

Kako ločiti tipske parametre na vrednostne in referenčne in kako jim prepisati privzeto vrednost

default Vrne 0 za vrednostne tipe Vrne null za referenčne tipe Vrne strukturo, s spremenljivkami po zgornjem

principu za strukturo

class Tubo<T> { public Tubo() { T data = default(T); if (default(T) == null) // referenčni tip else // vrednostni tip } …}

Page 13: Microsoft .NET Framework 2.0

Generiki

Razredi zbirk

Vmesniki zbirk

Osnovni razredi zbirk

Podporni razredi

List<T>Dictionary<K,V>SortedDictionary<K,V>Stack<T>Queue<T>

IList<T>IDictionary<K,V>ICollection<T>IEnumerable<T>IEnumerator<T>IComparable<T>IComparer<T>

Collection<T>KeyedCollection<T>ReadOnlyCollection<T>

Nullable<T>EventHandler<T>Comparer<T>

Page 14: Microsoft .NET Framework 2.0

Nullable types

Končno – vrednostni tip ima sedaj lahko nedefinirano vrednost

Še posebej koristno za sodelovanje z podatkovno bazo

Primer

Page 15: Microsoft .NET Framework 2.0

Nullable types

Definiramo z Nullable<T> ali pa T? (okrajšava)

Poleg same vrednosti vsebuje še zastavico Pretvorba T? v T je explicitna ali prek .Value

lastnosti (pomaga še .HasValues) Obratna pretvorba je implicitna

Page 16: Microsoft .NET Framework 2.0

Iteratorji

foreach je učinkovita zanka preko vseh elementov

Primer Zanaša se na metodo GetEnumerator() Uporaba foreach je preprosta, vendar z

enumeratorjem je nekaj dela

Page 17: Microsoft .NET Framework 2.0

Iteratorji

Primer enumeratorja

public class List{ internal object[] elements; internal int count;

public ListEnumerator GetEnumerator() { return new ListEnumerator(this); }}

public class ListEnumerator : IEnumerator{ List list; int index;

internal ListEnumerator(List list) { this.list = list; index = -1; }

public bool MoveNext() { int i = index + 1; if (i >= list.count) return false; index = i; return true; }

public object Current { get { return list.elements[index]; } }}

Page 18: Microsoft .NET Framework 2.0

Iteratorji

Metoda, ki inkrementalno izračuna in vrne sekvenco vrednosti yield return in yield break Mora vrniti IEnumerator ali IEnumerable

Lahko imamo več takih metod

Page 19: Microsoft .NET Framework 2.0

Popravi in nadaljuj

Se ne nanaša prav na sintakso Dobrodošla izboljšava razvojnega okolja Implementiran na nivoju CLR

Page 20: Microsoft .NET Framework 2.0

Anonimne metode

Pošiljanje blok kode kot parameter na mestu delegata

Zmanjšanje količine kode

button.Click += delegate { MessageBox.Show("Hello"); };

button1.Click += new EventHandler(button1_Click);...void button1_Click(object sender, EventArgs e){ MessageBox.Show("Hello");}

Page 21: Microsoft .NET Framework 2.0

Ostale izboljšave

Delni tipi – tip je porazdeljen med več datotek Statični razredi – lahko vsebuje samo

statične metode Določanje vidnosti lastnosti (get/set)

Tipično je set bolj omejen kot get Okrajšave imenskih prostorov

global::[imenski prostor] Kontrola opozoril (#pragma) prevajalnika

Page 22: Microsoft .NET Framework 2.0

Povzetek

Novosti so osredotočene na Performanse Zmanjšanje kode Uporabo več informacij med kodiranjem

Generiki, nullable types in iteratorji so udarne novost

Ni potrebno spreminjati starih aplikacij

Page 23: Microsoft .NET Framework 2.0

Vprašanja?

Page 24: Microsoft .NET Framework 2.0

Koristne informacije

Spletno domovanje C# http://msdn.microsoft.com/vcsharp/

MSDN Library http://msdn2.microsoft.com/library/

Novičarske skupine microsoft.public.dotnet.*, microsoft.private.slovenija.developers