język c# .net

29
Język C# .NET Język C# .NET Maria DEMS Maria DEMS

Upload: love

Post on 15-Jan-2016

105 views

Category:

Documents


0 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Język C# .NET

Język C# .NETJęzyk C# .NET

Maria DEMSMaria DEMS

Page 2: Język C# .NET

2

• 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 For EachEach, używanej do przeglądania kolekcji.

Język C#. NETJęzyk C#. NET

Page 3: Język C# .NET

3

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

Ogólna struktura programu Ogólna struktura programu w języku C#.NETw języku C#.NET

Page 4: Język C# .NET

4

• 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]...]Namespace nazwa[.nazwa1]...]

{{ deklaracje_typów;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 - przestrzeń nazwC#.NET - przestrzeń nazw

Page 5: Język C# .NET

5

Using System;Using System;

namespace PrzestrzenNazw1namespace PrzestrzenNazw1

{{ class Klasa1 { class Klasa1 { }}

struct Struktura1 {struct Struktura1 { }}

interface Interface1 {interface Interface1 { }}

delegate int Delegacja();delegate int Delegacja();

enum Emulator {enum Emulator { }}

namespace PrzestrzeńNazw2namespace PrzestrzeńNazw2

{{ }}

class Klasa2class Klasa2 {{

public static void Main(string[] args)public static void Main(string[] args)

{{ }} }}

}}

Using System;Using System;

namespace PrzestrzenNazw1namespace PrzestrzenNazw1

{{ class Klasa1 { class Klasa1 { }}

struct Struktura1 {struct Struktura1 { }}

interface Interface1 {interface Interface1 { }}

delegate int Delegacja();delegate int Delegacja();

enum Emulator {enum Emulator { }}

namespace PrzestrzeńNazw2namespace PrzestrzeńNazw2

{{ }}

class Klasa2class Klasa2 {{

public static void Main(string[] args)public static void Main(string[] args)

{{ }} }}

}}

C#.NET - szkielet programuC#.NET - szkielet programu

Page 6: Język C# .NET

6

• Słowo kluczowe usingusing, wykorzystywane jest jako:

· Dyrektywa Dyrektywa usingusing, 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 Instrukcja usingusing, 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ń nazwC#.NET - przestrzeń nazw

Page 7: Język C# .NET

7

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;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 - przestrzeń nazwC#.NET - przestrzeń nazw

Page 8: Język C# .NET

8

• Instrukcję usingusing 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ę DisposeDispose, 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)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 - instrukcja C#.NET - instrukcja usingusing

Page 9: Język C# .NET

9

• 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][atrybuty][modyfikatory]class identyfikator [:lista_bazowa]

{{ ciało_klasy;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 - typ referencyjny C#.NET - typ referencyjny classclass

Page 10: Język C# .NET

10

• 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 - dziedziczenieC#.NET - dziedziczenie

Dziedziczenie PrzykładBrak dziedziczenia class Klasa {}

Dziedziczenie pojedyncze class KlasaPochodna: KlasaBazowa {}

Implementacja dwóch interfejsów, brak

dziedziczeniaclass KlasaImpl: Interf1, Interf2 {}

Implementacja interfejsu, dziedziczenie

pojedynczeclass KlasaPochodnaImpl: KlasaBazowa, Interf1{}

Page 11: Język C# .NET

11

• StrukturyStruktury 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 inne typy zagnieżdżone.

C#.NET - strukturyC#.NET - struktury

Page 12: Język C# .NET

12

Deklaracja struktury ma postać:

[atrybuty][modyfikatory][atrybuty][modyfikatory]structstruct identyfikator [:interfejsy] identyfikator [:interfejsy] ciało[:]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 - strukturyC#.NET - struktury

Page 13: Język C# .NET

13

• 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,new, wywołany zostanie odpowiedni konstruktor,

• Jeżeli nie korzystamy z operatora newnew, 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 - strukturyC#.NET - struktury

Page 14: Język C# .NET

14

• 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 - interfejsyC#.NET - interfejsy

Page 15: Język C# .NET

15

Deklaracja interfejsu ma postać:

[atrybuty][modyfikatory]interface identyfikator [atrybuty][modyfikatory]interface identyfikator [:lista_bazowa][:lista_bazowa]

{{ ciało_interfejsu;ciało_interfejsu; }}

gdzie:

• atrybuty (opcjonalnie)- dodatkowa informacja deklaratywna

• modyfikatory (opcjonalnie) – modyfikator new i 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 - interfejsyC#.NET - interfejsy

Page 16: Język C# .NET

16

• 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 - delegacjeC#.NET - delegacje

Page 17: Język C# .NET

17

Deklaracja delegacji ma postać:

[atrybuty][modyfikatory] [atrybuty][modyfikatory] delegatedelegate typ_zwracany typ_zwracany identyfikator([parametry])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 - delegacjeC#.NET - delegacje

Page 18: Język C# .NET

18

• Wyliczenie stanowi odrębny typ zawierający zestaw stałych nazwanych, który jest listą wyliczeniową.

Deklaracja wyliczenia ma postać:

[atrybuty][modyfikatory][atrybuty][modyfikatory] enum enum identyfikator identyfikator [:typ_bazowy][:typ_bazowy]

{{ lista_wyliczenia;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 - typ wyliczeniowy C#.NET - typ wyliczeniowy enumenum

Page 19: Język C# .NET

19

• 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 C#.NET - metoda mainmain

Page 20: Język C# .NET

20

• Metoda mainmain może nie zwracać żadnej wartości, wtedy jej deklaracja wygląda następująco:

static void Main()static void Main() {{ }}

lub zwracać wartość typu integer:

static int Main()static int Main() {{ }}• Metoda main może przyjmować, jako parametry,

argumenty z wiersza poleceń.

static void Main(string[] args)static void Main(string[] args)

static int 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 ConvertConvert lub metody ParseParse.

C#.NET - metoda C#.NET - metoda mainmain

Page 21: Język C# .NET

21

• 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 C#.NET - modyfikatory dostępudostępu

Deklaracja Znaczenie

public Dostęp do składnika jest nieograniczony.

protectedDostęp jest ograniczony do klasy, w której składnik jest zawarty lub do typów

pochodnych tej klasy.

internalDostęp jest ograniczony do projektu, w którym znajduje się klasa zawierająca

składnik.

protected internalDostęp jest ograniczony do projektu, w którym znajduje się deklaracja klasy

zawierającej składnik, lub do typów pochodnych danej klasy.

private Dostęp do składnika jest ograniczony do typu zawierającego składnik.

Deklaracja Znaczenie

public Dostęp do składnika jest nieograniczony.

protectedDostęp jest ograniczony do klasy, w której składnik jest zawarty lub do typów

pochodnych tej klasy.

internalDostęp jest ograniczony do projektu, w którym znajduje się klasa zawierająca

składnik.

protected internalDostęp jest ograniczony do projektu, w którym znajduje się deklaracja klasy

zawierającej składnik, lub do typów pochodnych danej klasy.

private Dostęp do składnika jest ograniczony do typu zawierającego składnik.

Page 22: Język C# .NET

22

• W deklaracji danego składnika można stosować tylko jeden modyfikator dostępu - wyjątkiem jest kombinacja protected internalprotected 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: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 - modyfikatory C#.NET - modyfikatory dostępudostępu

Page 23: Język C# .NET

23

• Wskaźnik this 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)public Baza(string imie, string alias)

{{ this.imie = imie;this.imie = imie;

this.alias = alias;this.alias = alias; }}

– przekazywania obiektu jako parametru wywołania innych metod:

Przelicz(this);Przelicz(this);

C#.NET - wskaźnik C#.NET - wskaźnik thisthis

Page 24: Język C# .NET

24

– deklaracji indeksatorów:

Public int this[int param]Public int this[int param]

{{

getget

{{

return array[param];return array[param];

}}

setset

{{

array[param]= value;array[param]= value;

}} }}

C#.NET - wskaźnik C#.NET - wskaźnik thisthis

Page 25: Język C# .NET

25

if (wyrażenie)if (wyrażenie)

{{ instrukcja1;instrukcja1; }}

elseelse

{{ instrukcja2;instrukcja2; }}

Switch (wyrażenie)Switch (wyrażenie)

{{ case wartość1case wartość1

{{ instrukcja1;instrukcja1;

instrukcja_skoku;instrukcja_skoku; }}

case wartość2case wartość2

{{ instrukcja2;instrukcja2;

instrukcja_skoku;instrukcja_skoku; }}

default default

{{ instrukcja3;instrukcja3;

instrukcja_skoku; } instrukcja_skoku; } }}

if (wyrażenie)if (wyrażenie)

{{ instrukcja1;instrukcja1; }}

elseelse

{{ instrukcja2;instrukcja2; }}

Switch (wyrażenie)Switch (wyrażenie)

{{ case wartość1case wartość1

{{ instrukcja1;instrukcja1;

instrukcja_skoku;instrukcja_skoku; }}

case wartość2case wartość2

{{ instrukcja2;instrukcja2;

instrukcja_skoku;instrukcja_skoku; }}

default default

{{ instrukcja3;instrukcja3;

instrukcja_skoku; } instrukcja_skoku; } }}

C#.NET - instrukcje warunkoweC#.NET - instrukcje warunkowe

Page 26: Język C# .NET

26

DoDo

{{

instrukcja1;instrukcja1;

instrukcja2;instrukcja2;

}}

while (warunek);while (warunek);

while (warunek)while (warunek)

{{

instrukcja1;instrukcja1;

instrukcja2;instrukcja2;

}}

C#.NET - instrukcje C#.NET - instrukcje iteracyjneiteracyjne

Page 27: Język C# .NET

27

for ([inicjowanie_wartości];[wyrażenie];for ([inicjowanie_wartości];[wyrażenie];[iteratory])[iteratory])

{{ instrukcja1;instrukcja1;

instrukcja2;instrukcja2; }}• Wielokrotne wykonywanie instrukcji wewnętrznych

dla każdego elementu znajdującego się w tablicy lub w obiekcie kolekcji.

foreach (typ identyfikator foreach (typ identyfikator inin wyrażenie) wyrażenie)

{{

instrukcja1;instrukcja1;

instrukcja2; instrukcja2;

}}

C#.NET - instrukcje C#.NET - instrukcje iteracyjneiteracyjne

Page 28: Język C# .NET

28

• breakbreak –powoduje przerwanie wykonywania pętli lub instrukcji warunkowej w której się znajduje.

• continuecontinue – powoduje przerwanie jednego obiegu pętli; przekazuje sterowanie do następnej iteracji;

• gotogoto – 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.

C#.NET - instrukcje skokuC#.NET - instrukcje skoku

Page 29: Język C# .NET

29

• 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

Literatura