1 / 24

Microsoft .NET Framework 2.0

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

Download Presentation

Microsoft .NET Framework 2.0

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Microsoft .NET Framework 2.0 Novosti v sintaksi C# Miha Markič, MVP C#RIGHTHAND .net svetovanje in razvoj www.rthand.com, miha@rthand.com

  2. Agenda • Generiki • “Nullable types” • Iteratorji • Popravi in nadaljuj • Anonimne metode • Druge izboljšave

  3. Okvirjanje/Razokvirjanje • Boxing/Unboxing • Skoraj vse je objekt • Izjema so vrednostni tipi • Optimizacija • Prehod iz spremenljivke v objekt je okvirjanje • Obraten prehod je razokvirjanje

  4. i 100 int i = 100; i (okvirjen) o int 100 object o = i; Okvirjanje • Kako deluje Sklad Kopica Počasno.

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

  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)

  7. Primer generika

  8. 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

  9. 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;

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

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

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

  13. Generiki List<T> Dictionary<K,V> SortedDictionary<K,V> Stack<T> Queue<T> • Razredi zbirk • Vmesniki zbirk • Osnovni razredi zbirk • Podporni razredi 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>

  14. Nullable types • Končno – vrednostni tip ima sedaj lahko nedefinirano vrednost • Še posebej koristno za sodelovanje z podatkovno bazo • Primer

  15. 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

  16. 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

  17. Iteratorji 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]; } } } • Primer enumeratorja public class List { internal object[] elements; internal int count; public ListEnumerator GetEnumerator() { return new ListEnumerator(this); } }

  18. 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

  19. Popravi in nadaljuj • Se ne nanaša prav na sintakso • Dobrodošla izboljšava razvojnega okolja • Implementiran na nivoju CLR

  20. Anonimne metode • Pošiljanje blok kode kot parameter na mestu delegata • Zmanjšanje količine kode button1.Click += new EventHandler(button1_Click); ... void button1_Click(object sender, EventArgs e) { MessageBox.Show("Hello"); } button.Click += delegate { MessageBox.Show("Hello"); };

  21. 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

  22. 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

  23. Vprašanja?

  24. 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

More Related