microsoft .net framework 2.0

Post on 30-Dec-2015

52 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Microsoft .NET Framework 2.0

Novosti v sintaksi C#

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

www.rthand.com, miha@rthand.com

Agenda

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

Okvirjanje/Razokvirjanje

Boxing/Unboxing Skoraj vse je objekt Izjema so vrednostni tipi

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

Okvirjanje

Kako deluje

100

int

100

int i = 100;

object o = i;

o

i

i (okvirjen)

Počasno.

Sklad Kopica

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

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)

Primer generika

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

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;

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

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(){ …}

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 } …}

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>

Nullable types

Končno – vrednostni tip ima sedaj lahko nedefinirano vrednost

Še posebej koristno za sodelovanje z podatkovno bazo

Primer

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

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

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

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

Popravi in nadaljuj

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

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

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

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

Vprašanja?

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

top related