Wydzia Elektroniki Kierunek Ai R Zaawansowane metody programowania

  • Slides: 7
Download presentation
Wydział Elektroniki Kierunek: Ai. R Zaawansowane metody programowania Wykład 3

Wydział Elektroniki Kierunek: Ai. R Zaawansowane metody programowania Wykład 3

Język C# Tablice • Tablica jest zbiorem danych, do których można się odwołać poprzez

Język C# Tablice • Tablica jest zbiorem danych, do których można się odwołać poprzez indeksy numeryczne. • Typ tablicowy jest typem referencyjnym. Rzeczywiste instancje są tworzone dynamicznie za pomocą operatora new • Operator new określa długość tablicy Lenght • Indeksy elementów jak w C i C++ • Elementy tablicy są automatycznie inicjowane na wartości domyślne (zero lub null) • Tablica jednowymiarowa: int [] a 1 = new int[10]; • Tablica dwuwymiarowa: int [, ] a 2 = new int[10, 5]; • Tablica trójwymiarowa: int [, , ] a 3 = new int[10, 5, 2]; • Tablica postrzępiona (nieregularna): int [][] b = new int[3][]; b[0] = new int[10]; int[] t = new int [3]; b[1] = new int[5]; t[0] =2; b[2] = new int[20]; t[1] =3; • Inicjalizacja tablicy – lista wyrażeń zawarta między nawiasami klamrowymi: int [] aa = new int[] {2, 3, 4}; t[2] =4; • Rozmiar tablicy określa liczba wyrażeń int [] aa = t;

Język C# Parametry typu • Definicja klasy może określać zbiór public class Pair <TFirst,

Język C# Parametry typu • Definicja klasy może określać zbiór public class Pair <TFirst, TSecond> parametrów typu. Ich listę nazw umieszcza się w nawiasach trójkątnych { bezpośrednio po nazwie klasy. public TFirst; • Parametry typu mogą być później public TSecond; wykorzystywane w ciele deklaracji } klasy w celu zdefiniowania jej składowych. • Klasa zadeklarowana w taki sposób, aby korzystać z parametrów typowych nosi nazwę klasy ogólnej (generic), klasy generycznej lub klasy uniwersalnej. • Gdy klasa ogólna jest używana, odpowiednie argumenty typu muszą być podane dla każdego z parametrów typu. • Typ ogólny z podanymi argumentami typu nosi nawę typu skonstruowanego. Pair <int, string> Ala = new Pair <int, string> {First=1; Second = ”dwa”}; int i = Ala. First; string s = Ala. Second;

Język C# Klasy bazowe • • • Deklaracja klasy może określać klasę bazową, której

Język C# Klasy bazowe • • • Deklaracja klasy może określać klasę bazową, której nazwa pojawia się po nazwie klasy deklarowanej, parametrach typu i dwukropku. Pominięcie klasy bazowej oznacza dziedziczenie po typie object. Klasa dziedziczy składowe po swojej klasie bazowej. Klasa zawiera wszystkie składowe należące do klasy bazowej z wyjątkiem jej konstruktorów. Klasa potomna może dodawać nowe składowe do tych, które odziedziczyła, nie może jednak w żaden sposób usuwać odziedziczonych składowych. Każda klasa może być domyślnie konwertowana na typ dowolnej ze swoich klas bazowych. public class Point { public int x, y; public Point(int x, int y) { this. x = x; this. y = y; } } public class Point 3 D: Point { public int z; public Point 3 D(int x, int y, int z): base(x, y) { this. z = z; } } Point a = new Point(10, 20); Point b = new Point 3 D(10, 20, 30);

Język C# Metody • • • Metoda to składowa klasy, implementująca obliczanie lub działanie.

Język C# Metody • • • Metoda to składowa klasy, implementująca obliczanie lub działanie. Może być wykonana przez obiekt lub klasę. Metody statyczne i metody instancji. Metody mają listy parametrów (mogą być puste) i mogą zwracać jakąś wartość (może być void). class Test { static void Swap(ref int x, ref int y) { int temp = x; x = y; y = temp; } static void Main() { int i = 1, j = 2; Swap(ref i, ref j); // zamiana!! Parametry mogą być wartościowe lub referencyjne. Argument } class Test { przekazywany w postaci } static void Divide(int x, int y, out int rt, out int rm) { parametru referencyjnego musi być zmienną. rt = x/y; Parametr referencyjny jest rm = x%y; } deklarowany static void Main() { z modyfikatorem ref. int result, reminder; Parametr wyjściowy Divide(10, 3, out result, out reminder); // 3 1 jest deklarowany }} z modyfikatorem out.

Język C# Metody wirtualne, przesłaniające i abstrakcyjne • • Gdy deklaracja metody zawiera modyfikator

Język C# Metody wirtualne, przesłaniające i abstrakcyjne • • Gdy deklaracja metody zawiera modyfikator virtual to taka metoda jest metodą wirtualną. Metoda wirtualna może zostać przesłonięta w klasie potomnej. Metoda instancji w klasie potomnej zawierająca modyfikator override przesłania odziedziczoną metodę wirtualną. Metoda abstrakcyjna jest metodą wirtualną pozbawioną implementacji. Deklaracja tej metody wymaga użycia słowa kluczowego abstract i jest możliwa tylko w klasie również zadeklarowanej z użyciem tego samego słowa. Metoda abstrakcyjna musi być przesłonięta w każdej nieabstrakcyjnej klasie potomnej. public abstract class Ala { ………………. . public abstract int IIAR(void); } ……………………… public class Ela: Ala { …………. . public override int IIAR(void) { Console. Writeline(”Ala ma kota”); } }

Język C# Przeładowywanie (przeciążanie) metod • Przeładowywanie metod umożliwia class Test { wielu metodom

Język C# Przeładowywanie (przeciążanie) metod • Przeładowywanie metod umożliwia class Test { wielu metodom z tej samej klasy static void F() { posiadanie tej samej nazwy pod Console. Writeline(”F()”); } warunkiem, że maja one różne static void F(object x) { sygnatury. Console. Writeline(”F(object)”); } • Wybór metody następuje w trakcie static void F(int x) { kompilacji. Console. Writeline(”F(int)”); } • Idea: kompilator wyszukuje metodę, static void F(int x, int y) { która najlepiej pasuje do Console. Writeline(”F(int, int)”); } argumentów, lub zgłasza błąd, gdy static void Main() { nie może znaleźć sensownego F(); // F() dopasowania. F(1); // F(int) • Przykład z C++ - klasa Complex F(”Ala”); // F(object) • Zadanie do domu: przerobić na C#. F(1, 2); // F(int, int) } }