290 likes | 526 Views
Język C# .NET. Maria DEMS. Język C#. NET. Język C#.NET jest to obiektowy język programowania, łączący w sobie cechy języków C++, Javy i VB. Jego składnia przypomina składnię C++, zawiera przeciążanie operatorów.
E N D
Język C# .NET Maria DEMS
Język C#. NET • Język C#.NET jest to obiektowy język programowania, łączący w sobie cechy języków C++, Javy i VB. • Jego składnia przypomina składnię C++, zawiera przeciążanie operatorów. • Z języka Java pochodzi interfejs oraz sposób deklarowania klas (całość deklaracji w jednym miejscu), • z VB zaczerpnięto zdarzenia i konstrukcję pętli For Each, używanej do przeglądania kolekcji.
Ogólna struktura programu w języku C#.NET • Programy napisane w języku C#, mogą składać się z kilku plików. • Każdy plik musi zawierać, co najmniej jedną przestrzeń nazw, która najczęściej składa się z • innych przestrzeni nazw, • klas, • struktur, • interfejsów, • typów wyliczeniowych • delegacji, stanowiących dodatek do innych przestrzeni nazw.
C#.NET - przestrzeń nazw • W programie zawsze jest tworzona domyślna przestrzeń nazw - jest to przestrzeń globalna obecna w każdym pliku. • Każdego identyfikatora, znajdującego się w globalnej przestrzeni, możemy używać w innej przestrzeni posiadającej nazwę. Namespace nazwa[.nazwa1]...] { deklaracje_typów; } gdzie: • nazwa,nazwa1 – dowolna nazwa określająca przestrzeń nazw (może zawierać spacje) • deklaracje_typów – deklaracje typów które można zdefiniować w przestrzeni nazw
C#.NET - szkielet programu Using System; namespace PrzestrzenNazw1 { class Klasa1 { } struct Struktura1 { } interface Interface1 { } delegate int Delegacja(); enum Emulator { } namespace PrzestrzeńNazw2 { } class Klasa2 { public static void Main(string[] args) { } } }
C#.NET - przestrzeń nazw • Słowo kluczowe using, wykorzystywane jest jako: · Dyrektywa using, tworząca synonim przestrzeni nazw; umożliwia ona korzystanie z wszystkich składników danej przestrzeni nazw (można korzystać z typów bez wprowadzania ich pełnej nazwy), ale nie udostępnia składników zawartych w zagnieżdżonej przestrzeni nazw. · Instrukcja using, określająca zakres ważności danego obiektu na czas jego użycia; zezwala na użycie typów zawartych w przestrzeni nazw bez konieczności wprowadzania nazwy złożonej określonego typu.
C#.NET - przestrzeń nazw Przestrzenie nazw można podzielić na dwie grupy: • systemowe przestrzenie nazw (wbudowane, zawarte w .NET Framework). • przestrzenie zdefiniowane przez użytkownika Sposób deklaracji: using [synonim=]klasa_lub_przestrzeń_nazw; gdzie: • synonim– zdefiniowana przez użytkownika nazwa określająca daną przestrzeń nazw. • klasa_lub_przestrzeń_nazw- przestrzeń nazw lub nazwa klasy korzystająca z danego synonimu.
C#.NET - instrukcja using • Instrukcję using stosujemy wtedy, gdy w danym miejscu programu potrzebny jest określony zasób (wyłącznie w celu wykonania określonej instrukcji). • Po wykonaniu instrukcji należy wykonać metodę Dispose, która zwolni niepotrzebny już zasób (zwolnienie zasobu odbywa się także mimo braku instrukcji Dispose). Sposób deklaracji: using (wyrażenie | typ identyfikator = inicjalizator) gdzie: • wyrażenie – wyrażenie w którym wywoływana jest metoda Dispose. • inicjalizator – wyrażenie tworzące obiekt
C#.NET - typ referencyjny class • Class – struktura danych zawierająca składniki danych (stałe, pola), składniki funkcyjne (metody, właściwości, zdarzenia, konstruktory) oraz typy zagnieżdżone. [atrybuty][modyfikatory]class identyfikator [:lista_bazowa] { ciało_klasy; } gdzie: • atrybuty(opcjonalnie) – informacja deklaratywna • modyfikatory (opcjonalnie) – stosowane są modyfikatory new, abstract, sealed i cztery modyfikatory dostępu • identyfikator – nazwa danej klasy • lista_bazowa (opcjonalnie) – zawiera nazwy jednej klasy bazowej i dowolną ilość zaimplementowanych interfejsów (oddzielonych przecinkami).
C#.NET - dziedziczenie • W języku C# możliwe jest dziedziczenie składników pochodzących od tylko jednej klasy bazowej. • Sposoby dziedziczenia i implementacja interfejsów jest następująca:
C#.NET - struktury • Struktury reprezentują struktury danych, zawierają dane i składniki funkcyjne. • Posiadają mała liczbę składników, co sprawia, że nie muszą korzystać z dziedziczenia czy tożsamości referencyjnej; w trakcie przypisania struktury kopiowana jest wartość a nie odwołanie. • Typ strukturalny jest typem bezpośrednim, który może zawierać: • stałe, • konstruktory, • pola, • metody, • właściwości, • operatory i innetypy zagnieżdżone.
C#.NET - struktury Deklaracja struktury ma postać: [atrybuty][modyfikatory]struct identyfikator [:interfejsy] ciało[:] • atrybuty (opcjonalnie)- dodatkowa informacja deklaratywna • modyfikatory (opcjonalnie) – modyfikator new i modyfikatory dostępu • identyfikator – nazwa struktury • interfejsy (opcjonalnie) – wykaz interfejsów implementowanych przez strukturę (oddzielone przecinkami) • ciało – ciało struktury zawierające deklaracje jej składników
C#.NET - struktury • W przeciwieństwie do klas, struktury nie obsługują dziedziczenia; nie mogą dziedziczyć właściwości innej struktury czy klasy, nie mogą być bazą dla klasy potomnej. • Jeśli do utworzenia struktury wykorzystamy operator new, wywołany zostanie odpowiedni konstruktor, • Jeżeli nie korzystamy z operatora new, elementy struktury nie będą miały przypisanych początkowych wartości pól, dlatego przed wykorzystaniem takiej struktury należy zainicjować pola.
C#.NET - interfejsy • Interfejs stanowi pewnego rodzaju umowę, której musi przestrzegać klasa lub struktura implementująca dany interfejs. • Interfejs może dziedziczyć po wielu interfejsach bazowych, • Klasa lub struktura może implementować wiele interfejsów. • Interfejsy mogą zawierać sygnatury składników takich jak: metody, właściwości zdarzenia i indeksatory. • Interfejs określa, jakie składniki muszą się znajdować w implementującej go klasie czy strukturze. • Interfejs nie może być składnikiem przestrzeni nazw lub klasy
C#.NET - interfejsy Deklaracja interfejsu ma postać: [atrybuty][modyfikatory]interface identyfikator [:lista_bazowa] { ciało_interfejsu; } gdzie: • atrybuty(opcjonalnie)- dodatkowa informacja deklaratywna • modyfikatory(opcjonalnie) – modyfikator newi cztery modyfikatory dostępu • identyfikator – nazwa danego interfejsu • lista_bazowa (opcjonalnie) - wykaz zawierający jedną lub kilka nazw interfejsów bazowych (oddzielonych przecinkami)
C#.NET - delegacje • Deklaracja delegacji definiuje typ referencyjny hermetyzujący metodę z wyszczególnionym zestawem argumentów i ze zwracanym typem. • Hermetyzacja metody polega na szczegółowym określeniu liczby i typu argumentów oraz typu wartości zwracanych przez metodę. • Delegacja pozwala na przesłanie funkcji jako parametru (delegacja wymaga, aby funkcja przekazywana miała taka sama strukturę jak deklaracja delegacji). • Używając delegacji nie trzeba znać klasy obiektu, do której obiekt delegacji się odwołuje, jedynie typy argumentów i typ zwracany przez metodę muszą być zgodne. Dzięki temu delegacje można wywoływać “anonimowo”.
C#.NET - delegacje Deklaracja delegacji ma postać: [atrybuty][modyfikatory] delegate typ_zwracany identyfikator([parametry]) gdzie: • atrybuty(opcjonalnie)- dodatkowa informacja deklaratywna • modyfikatory (opcjonalnie) – modyfikator new i cztery modyfikatory dostępu • typ_zwracany – typ jaki zostanie zwrócony, musi pasować do typu zwracanego przez metodę • identyfikator – nazwa danej klasy • parametry– lista parametrów
C#.NET - typ wyliczeniowy enum • Wyliczenie stanowi odrębny typ zawierający zestaw stałych nazwanych, który jest listą wyliczeniową. Deklaracja wyliczenia ma postać: [atrybuty][modyfikatory] enum identyfikator [:typ_bazowy] { lista_wyliczenia; } gdzie: • typ_bazowy (opcjonalnie) – źródłowy typ wyliczeniowy, który określa zawartość wyliczenia (domyślnie typ int) • lista_wyliczenia – lista identyfikatorów wyliczenia oddzielonych przecinkami (domyślna wartość pierwszego elementu to 0, kolejne elementy mają wartość zwiększoną o 1).
C#.NET - metoda main • Metoda main jest głównym segmentem programu, w którym zaczyna się i kończy jego działanie. • Deklaracja tej metody znajduje się w klasie lub strukturze. • Metoda main musi być metodą statyczną (static), może nie zwracać żadnej wartości (void) albo zwracać wartość typu int (int). • Wewnątrz metody main tworzymy obiekty i inne metody. • Metoda main umożliwia także pobieranie parametrów z wiersza poleceń.
C#.NET - metoda main • Metoda main może nie zwracać żadnej wartości, wtedy jej deklaracja wygląda następująco: static void Main() { } lub zwracać wartość typu integer: static int Main() { } • Metoda main może przyjmować, jako parametry, argumenty z wiersza poleceń. static void Main(string[] args) static int Main(string[] args) • W obu tych przypadkach parametrem metody main jest tablica elementów typu string, które można konwertować na typy liczbowe korzystając z klasy Convert lub metody Parse.
C#.NET - modyfikatory dostępu • Modyfikatory dostępu służą określeniu dostępności składnika lub typu. • C#.NET wykorzystuje pięć poziomów dostępności, od największego do najmniejszego:
C#.NET - modyfikatory dostępu • W deklaracji danego składnika można stosować tylko jeden modyfikator dostępu - wyjątkiem jest kombinacja protected internal. • Jeżeli w deklaracji składnika nie występuje określenie dostępności, to przydzielana jest składnikowi dostępność domyślna (zależna od dostępności obiektu nadrzędnego). • Słowo kluczowe base: • udostępnia składniki klasy bazowej w kodzie klasy pochodnej i umożliwia wywołanie przesłoniętej metody klasy bazowej. • umożliwia określenie konstruktora klasy bazowej, który będzie wykorzystywany podczas tworzenia egzemplarzy klasy pochodnej.
C#.NET - wskaźnik this • Wskaźnik this odnosi się do bieżącego egzemplarza klasy, dla którego wywołano metodę. Słowa kluczowego this używa się do: • określenia składników danej klasy, ukrytych poprzez stosowanie podobnych nazw, np.: public Baza(string imie, string alias) { this.imie = imie; this.alias = alias; } • przekazywania obiektu jako parametru wywołania innych metod: Przelicz(this);
C#.NET - wskaźnik this • deklaracji indeksatorów: Public int this[int param] { get { return array[param]; } set { array[param]= value; } }
C#.NET - instrukcje warunkowe if (wyrażenie) { instrukcja1; } else { instrukcja2; } Switch (wyrażenie) { case wartość1 { instrukcja1; instrukcja_skoku; } case wartość2 { instrukcja2; instrukcja_skoku; } default { instrukcja3; instrukcja_skoku; } }
C#.NET - instrukcje iteracyjne Do { instrukcja1; instrukcja2; } while (warunek); while (warunek) { instrukcja1; instrukcja2; }
C#.NET - instrukcje iteracyjne for ([inicjowanie_wartości];[wyrażenie];[iteratory]) { instrukcja1; instrukcja2; } • Wielokrotne wykonywanie instrukcji wewnętrznych dla każdego elementu znajdującego się w tablicy lub w obiekcie kolekcji. foreach (typ identyfikator in wyrażenie) { instrukcja1; instrukcja2; }
C#.NET - instrukcje skoku • break –powoduje przerwanie wykonywania pętli lub instrukcji warunkowej w której się znajduje. • continue – powoduje przerwanie jednego obiegu pętli; przekazuje sterowanie do następnej iteracji; • goto – służy do przekazywania sterowania bezpośrednio do instrukcji oznaczonej etykietą (najczęściej do określonej etykiety case instrukcji switch albo etykiety default instrukcji switch. goto identyfikator; goto case wartość; goto default; • return – powoduje przerwanie wykonywania metody i powrót sterowania do miejsca, w którym metoda została wywołana; może zwrócić wartość wyrażenia.
Literatura • Dino Esposito : Tworzenie aplikacji za pomocą ASP.NET oraz ADO.NET (Microsoft Press, Wydawnictwo RM Warszawa 2002) • Julian Templeman, David Vitter : Visual Studio .NET: .NET Framework. Czarna Księga (Helion 2003) • Microsoft Press : Microsoft Visual C#.NET Encyklopedia (Helion 2003) • Rusty Harold : XML. Księga Eksperta (Helion 2001) • Scott Worley : ASP.NET. Vademecum Profesjonalisty (Helion, 2003) • Steaven Holzner : XML. Vademecum Profesjonalisty (Helion2001) • http://www.ASP.com • http://www.ietf.org/RFC% 2069/ • http://www.learnASP.com • http://www.msdn.microsoft.com/vcsharp/ • http://www.windows2003.pl • http://www.xml.com