84
Maxymalna Wiedza

C# - Typy Referecyjne i typy wartościowe i wiele innych rzeczy

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

MaxymalnaWiedza

Page 3: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Jak poznałem waszą matkę

Page 4: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Dzieci zanim poznałem waszą matkę musiałem rozwinąć swoją kariere jako programista w C#.

Page 5: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Dzisaj w 2030 roku mamy notesy które wyglądają jak smartphony.

Page 6: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Każdy znas ma implaty które wyświetlają statusy Facebook i Google+

Page 7: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

...trój wymiarowe monitory

Page 8: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Mamy też elektryczne kupki które wyświetlają efektowne informacje...które nikomu nie są potrzebne

Page 9: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

2011

Ale dzieci w 2011 roku tych rzeczy nie było. Chociaż dla was zapewne to codzienność i jedny stały obraz rzeczywistości.

Page 10: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

2011

2011 roku nie programowałem kupków ani elektronicznych notesów. W 2011 rozpoczynałem programowanie w Windows Phone 7 dla mojej firmy.

Page 11: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

2011

Była to moja życiowa szansa ponieważ w Białej Podlaskiej nie mogłem się rozwinąć. W Warszawie miałem prace, przyjaciół i szkołe. Wszystko to ułożyło się w przeciągu 2 miesięcy...to było moje przeznaczenie.

Page 12: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

2011

Z drugiej strony było to ogromne wyzwanie. Wcześniej nudziłem się jak cholera. Teraz nie miałem czasu na nic. Jednak to i tak była nie wielka cena za tą życiową szanse.

Page 13: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

2011

W listopadzie 2011 roku prowadziłem wykład na grupie PJWSTK i ten wykład miał wielki wypływ na dalszą część mojego życia.

Page 14: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Max Payne

Page 15: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Nie było żadnych błędów. Klient nie narzekał...i jeszcze sprawiło mi to przyjemność...

Page 16: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Ten ostatni kod był jak wykrzyknik podsumuwjący wszysto to co doporwadziło mnie aż tutaj. Puściłem klawiaturę i było już po wszystkim.

Page 17: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Jednak aby moja historia miała jakikolwiek sens musze się cofnąc o trzy lata. Kiedy to przyszychodziłem na wykłady o C#.

Page 18: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Wtedy programowałem w Javie. Ale nie byłem naiwny. Platforma nie miała dla mnie znaczenia liczyło się tylko kto i ile dla mnie zapłaci.

Programista tak naprawdę jest twórcą funkcjonalności biznesowy. Dla tych z wyższej warstwy rezultat był najważniejszy ,a nie technologia czy platforma.

Page 19: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Każdy kto myślał innaczej był frajerem. W tej braży istnieje zbyt duży podział pomiędzy klientem ,a programistą. Kasa płynie rurami ,a informacje przeciekają. Wszyscy są wkurzeni i wszyscy wszytkich obwiniają.

Nie miałem złudzej programowanie nie miało nic wspólnego z dobrą zabawą.

Page 20: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Jednak przyszedłem na wykład o C# prowadzonego przez Cezarego Walenciuk-a.

Koleś był dziwny. Prowadził bloga ,ale nie wyglądał na kolejnego ciasnego w garniturze. Nie widziałem jeszcze takiego typa.

Page 21: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Miał on dziwny styl prezentowania.

Zamiast odrazu monotonym głosem wytłumaczać co jak pokazywał on dziwne pochrzanione obrazki.

Page 22: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Te pozytywne przeczucie uderzyło mnie jak kod SQL-INJECTION prosto w twarz. Coś tu było fajnego chociaż jeszcze nie pojawił się ani jeden fragment kodu.

Programistyczny sen

Page 23: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Wkońcu skończył on pokazywać dziwne obrazki i opowiadać o sobie.

Chciałem zobaczyć czy ten dzieciak umie przekazać troche wiedzy.

Page 24: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Klasa

Page 25: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Klasa

Różnica pomiędzy klasą a obiektem jest taka ,że obiekt jest instancją danej klasy. Czyli różnica pomiędzy nimi jest niczym jak kategoria kot ,a konkretny kot. Nie można się bawić z “pojęciem kot” tylko z jego konkretnym egzemplarzem.

Page 26: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Demo

Utworzenie klasy Kot

Omówienie konstruktora

Statyczne klasy

Klasy anonimowe

Page 27: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Modyfikator dostępu

Page 28: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Java

Page 29: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 30: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 31: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 32: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

class Kobieta {     

private Piersi Cycki;     

public  Piersi PokazCyckiWybranemu(Facet facet)     {         

return Cycki;     }

}

Page 33: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 34: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 35: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

C#

Page 36: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

DEMO

Page 37: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Typ referecyjny

,a typ wartościowy

Page 38: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Typy wartościowe

Typy takie jak int,float ,double ,char są typami wartościowymi.

Kiedy deklarujesz zmienną jako typ wartościowy kompilator alokuje kod w wystarczająco dużym bloku pamięci.

Czyli dla typu int kompilator rezerwuje 32 bitów pamięci  ponieważ typ ten składa się z 4 bajtów. 

int a = 121;

Page 39: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Typy referecyjne

Sprawa wygląda zupełnie inaczej z klasami. Kiedy deklarujesz obiekt klasy kompilator nie generuje kodu, który zarezerwowałby odpowiedni obszaru pamięci dla danego obiektu.

Kompilator w pamięci przechowuje  adres (referencje) do innego bloku pamięci,  gdzie jest przechowywana klasa. Pamięć ta dla klasy jest lokalizowana wtedy, gdy tworzymy nowy obiekt za pomocą słowa kluczowego new.

Page 40: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 41: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Kopiowanie

wartości

Page 42: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 43: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Czyszczenie

obiektów

Page 44: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Stos i Sterta

Stos jest zorganizowany niczym jak pudełka, które są ułożone pionowo jedne pod drugim. Kiedy metoda jest wywoływana  każdy parametr jest wkładany do pudełka i układany pionowo jedno pod drugim. Każda zmienna jest powiązana z zawartością tego pudełka i one są umieszczane pod pudełkiem na stosie. Po skończonej metodzie wszystkie pudełka zostają usunięte.

Sterta wygląda jak kilka  poziomo ułożonych pudełek ustawionych oddzielnie od siebie. Każde z tych pudełek ma na sobie napis czy jest wciąż używane. Gdy tworzymy nową instancje obiektu program wyszukuje puste nie używane pudełko  i umieszcza w nim obiekt. Kiedy ostatnia referencja znika w którymś momencie Garbage Collector opróżni pudełko i ustawi je do ponownego użycia.

Page 45: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

static void UtworzeObiekt(int h,int b) {

int a = 6; Cuboid cu; cu = new Cuboid(a, b, h);

}

Page 46: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 47: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Null - demo

Page 48: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Nie ma pustych obiektów

Facet tenkoles = null;

Page 49: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Typy wartościowe

Page 50: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

bool? b = null; int? bb = null; float? bbb = null;

Page 51: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Ref Out

Page 52: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Cuboid cuboid = new Cuboid(1, 2, 3);string napis = "Ala ma kota";             int liczba = 121;             NieZmienie(cuboid, liczba, napis);

static void NieZmienie(Cuboid cuboid, int liczba, string napis)     {             

cuboid = new Cuboid(44, 555, 666);             liczba--;             napis = "1234567890qwertyuiopasdfghj";         

}

Page 53: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Cuboid cuboid = new Cuboid(1, 2, 3);string napis = "Ala ma kota";             int liczba = 121;             Zmienie(ref cuboid, ref liczba, ref napis);

static void Zmienie(ref Cuboid cuboid, ref int liczba, ref string napis){             

cuboid = new Cuboid(44, 555, 666);             liczba--;             napis = "1234567890qwertyuiopasdfghj";         

}

Page 54: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Object boxing and

unboxing

Page 55: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

System.Object obj2; object obj;

Page 56: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 57: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Boxing - pakowanie

Page 58: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

int a = 121; object ob = a;

Jak właśnie widać zmienne object mogą referować się do jakiekolwiek obiektu referencyjnego. Mogą też przechowywać typy wartościowe.

Jednak to proste wyrażenie wymaga wyjaśnienia. Zmienne typu wartościowego żyją na stosie , a zmienna object żyje na stercie, czyli ona jest typu referencyjnego .

W wyniku tej operacji wartość ze stosu zmiennej “a” zostanie skopiowana na stertę i referencyjnie powiązana z zmienną typu object. Ta operacja nazywa się boxing – po polsku pakowaniem , a nie boksowaniem

Page 59: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 60: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

UnBoxing - wypakowywanie

Page 61: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

int a = 121; object ob = a;int b = (int)ob;

Page 62: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 63: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 64: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 65: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

IS – AS

DEMO

Page 66: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Struktura i Klasa

Page 67: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 68: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 69: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 70: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 71: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 72: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Tablice

Page 73: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

int[] numery; object[] obiekty;

Page 74: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

int[] numery; numery = new int[3]; object[] obiekty = new object[2];

Page 75: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 76: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Wartości tablic

Page 77: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

int[] tab = new int[5];             for (int i = 0; i < 5; i++)     {                 

tab[i] = i;             }

Page 78: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

int[] dawaj = new int[3] { 1, 2, 3}; int[] dawaj2 = new int[] { 1, 2, 3, 4, 6, 7, 8, 9 };

Page 79: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Iteracja wobec tablic

Page 80: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Kopiowanie tablic

Page 81: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Tablice wielowymiarowe

Page 82: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy
Page 83: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy

Koniec

Prezentacja była ciekawa.A to dopiero początek Maxymalenj wiedzy.Wiedziałem ,że jutro czeka mnie jeszcze więcej zabawy.

Page 84: C# - Typy Referecyjne i typy wartościowe  i wiele innych rzeczy