C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.

Slides:



Advertisements
Podobné prezentace
Pro začátek něco lehčího
Advertisements

(instance konkrétní třídy)
Počítače a programování 1 Přednáška 13 Jiří Šebesta.
Funkce Připomeňme si program pro výpočet faktoriálu:
Programovací jazyk C++
Pole, ukazatele a odkazy
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Strukturované datové typy
C# pro začátečníky Mgr. Jaromír Osčádal
Programování v C++ Cvičení.
Větvení cykly J a v a Začínáme programovat Lucie Žoltá.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
C# - struktury, výčtové typy, pole
C# - datové typy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
C# - Registry Windows Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
C# - znakové typy a řetězce
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
C# - číselné datové typy
C# - Exceptions (výjimky)
C# - pointery Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Objektové programování
C# - funkce a procedury Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
C# - OOP (object oriented programming)
Současný svět Projekt č. CZ /3. 1
C# - Grafika Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
PRÁCE S VLÁKNY A APLIKAČNÍ DOMÉNY V.NET FRAMEWORK APLIKACÍCH Architektura technologie.NET Jan Martinovič, FEI - Katedra Informatiky.
C# - Úvod Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
C# - prvky UI – vlastnosti a události Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
6. cvičení Polymorfismus
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
C# - I/O, streamy, práce se soubory
Počítače a programování 1
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
C# - Testování a ladění aplikací Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
C# - Menus, ToolBars and Dialogs Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
ADO.NET – Transakce Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
C# - Generic Collections Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat.
13/04/20151 Datový typ třída – class (1) Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje.
ADO.NET – Objekt DataSet (offline scenář) Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
POSLOUPNOST úkol 1_41. ZADÁNÍ Sestavte program, který doplní tabulku nepřímé úměrnosti pro hodnoty proměnné x = 1, …, n. Nepřímá úměrnost je zadána uživatelem.
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
C# - konverze datových typů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
ADO.NET – object Connection Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Pokročilé programování v C++ (část B)
Příklady v jazyku C – část 8. Napište program, který inicializuje 2-rozměrné pole uživatele (5 řádků, 2 sloupce) a naplní ho hodnotami (první sloupec.
PŘÍKAZ while úkol 1_42.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
Strategy. Motivace Různé algoritmy pro stejnou akci Hromada kódu v mnoha podmínkách Důsledky  Komplexnost  Špatná čitelnost  Těžká správa kódu  Těžka.
Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA:
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Vzorové řešení zápočtového testu
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Transkript prezentace:

C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí

Možnosti předávání parametrů V C# je možné předávat parametry jak hodnotou tak odkazem (referencí) Předávání odkazem umožňuje metodám pracovat s odkazem na konkrétní proměnnou, objekt a pracovat s přímo s jejím obsahem – „při práci s parametrem měníme originál“ Pokud chceme předávat parametr referencí budeme potřebovat klíčové slovo ref nebo out

Předávání parametrů hodnotového typu hodnotou (by value) – odhadněte výstup programu using System; class PassingValByVal { static void Ctverec(int x) // Parametr x je předáván hodnotou. Změny //hodnoty parametru x se nedotknou hodnoty myInt. { x *= x; Console.WriteLine(„Hodnota uvnitř metody: {0}", x); } public static void Main() { int myInt = 5; Console.WriteLine(„Hodnota před zavoláním metody: {0}", myInt); Ctverec(myInt); // Předání hodnoty v proměnné myInt hodnotou. Console.WriteLine(„Hodnota po zavolání metody: {0}", myInt); }

Odpověď Hodnota před voláním metody: 5 Hodnota uvnitř metody: 25 Hodnota po zavolání metody: 5

Předávání parametrů hodnotového typu odkazem (by reference) – odhadněte výstup programu using System; class PassingValByRef { static void Ctverec(ref int x) { // Parametr x je předán odkazem. Změny x // ovlivní původní proměnnou myInt. x *= x; Console.WriteLine(„Hodnota uvnitř metody : {0}", x); } public static void Main() { int myInt = 5; Console.WriteLine(„Hodnota před zavoláním metody: {0}", myInt); Ctverec(ref myInt); // Předání myInt odkazem. Console.WriteLine(„Hodnota po zavolání metody: {0}", myInt); }

Odpověď Hodnota před zavoláním metody: 5 Hodnota uvnitř metody: 25 Hodnota po zavolání metody: 25

Předávání parametrů referenčního typu hodnotou (by value) – odhadněte výstup programu using System; class PassingRefByVal { static void Change(int[] arr) { arr[0]=888; // Toto ovlivní originální hodnotu. arr = new int[5] {-3, -1, -2, -3, -4}; // Tato změna je lokální. Console.WriteLine(„Uvnitř metody, první element je: {0}", arr[0]); } public static void Main() { int[] myArray = {1,4,5}; Console.WriteLine(„Uvnitř Main, před voláním metody, první prvek je: {0}", myArray [0]); Change(myArray); Console.WriteLine(„Uvnitř Main, po volání metody, první prvek je: {0}", myArray [0]); }

Odpověď Uvnitř Main, před voláním methody, první prvek je: 1 Uvnitř metody, první prvek je: -3 Uvnitř Main, po volání methody, první prvek je: 888

Předávání parametrů referenčního typu odkazem (by reference) – odhadněte výstup programu using System; class PassingRefByRef { static void Change(ref int[] arr) { arr[0]=888; //tyto operace ovlivní prvky předaného pole arr = new int[5] {-3, -1, -2, -3, -4}; Console.WriteLine(„Uvnitř metody, první prvek je: {0}", arr[0]); } public static void Main() { int[] myArray = {1,4,5}; Console.WriteLine(„Uvnitř Main, před voláním metody, první prvek je: {0}", myArray [0]); Change(ref myArray); Console.WriteLine(„Uvnitř Main, po volání methody, první prvek je: {0}", myArray [0]); }

Odpověď Uvnitř Main, před voláním metody, první prvek je: 1 Uvnitř metody, první prvek je: -3 Uvnitř Main, po volání metody, první prvek je: -3

Úkol Napište program s jednou metodou SwapStrings, která bude mít dva parametry předané odkazem a provede záměnu dvou stringových řetězců.

Výstupní parametry – output parameters Použijeme klíčové slovo out Toto klíčové slovo u parametru znamená, že parametr odkazuje na tu proměnnou, která byla do metody poslána jako parametr. Všechny změny provedené u tohoto parametru budou reflektovány do proměnných i po návratu do volající metody. Používá se u metod u kterých je potřeba vracet více hodnot. Metoda s out parametry může stále používat pro návrat hodnoty klíčové slovo return Proměnná předaná jako out parametr nemusí být inicializována, k nastavení hodnoty ale musí dojít uvnitř funkce Při použití out parametru je předávána reference ne hodnota !!!

Out Parameters – příklad Odhadněte výsledek následující funkce using System; public class MyClass { public static int TestOut(out char i) { i = 'b'; return -1; } public static void Main() { char i; // proměnná nemusí být inicializována Console.WriteLine(TestOut(out i)); Console.WriteLine(i); }

Rozdíl mezi out a ref předáním parametrů Out parametry musí být definovány před použitím ve volané funkci např.: Ref parametry musí být definovány před použitím ve volané funkci např.: public static void MyMethod(out int[] arr) { arr = new int[10]; // jednoznačné přiřazení arr } public static void MyMethod(ref int[] arr) { arr = new int[10]; // arr inicializováno na jiné pole }

Příklad použití Out parametrů Zdrojový kód using System; class TestOut { static public void FillArray(out int[] myArray) { // Inicializuji pole: myArray = new int[5] {1, 2, 3, 4, 5}; } static public void Main() { int[] myArray; // Inicializace není potřebná // Předání parametru pole funkci s použitím out: FillArray(out myArray); // Zobrazím prvky pole: Console.WriteLine(„Prvky pole :"); for (int i=0; i < myArray.Length; i++) Console.WriteLine(myArray[i]); } Výstup ?

Příklad použití Out parametrů Zdrojový kód using System; class TestOut { static public void FillArray(out int[] myArray) { // Inicializuji pole: myArray = new int[5] {1, 2, 3, 4, 5}; } static public void Main() { int[] myArray; // Inicializace není potřebná // Předání parametru pole funkci s použitím out: FillArray(out myArray); // Zobrazím prvky pole: Console.WriteLine(„Prvky pole jsou:"); for (int i=0; i < myArray.Length; i++) Console.WriteLine(myArray[i]); } Výstup Prvky pole:

Příklad použití Ref parametrů Zdrojový kód using System; class TestRef { static public void FillArray(ref int[] myArray) { // Pokud pole není vytvořené vytvořím ho: if (arr == null) arr = new int[10]; // Pokud je vytvořené naplním ho: arr[0] = 123; arr[4] = 1024; } static public void Main() { int[] myArray = {1,2,3,4,5}; // Inicializace // Předání parametru pole funkci s použitím ref: FillArray(ref myArray); // Zobrazím prvky pole: Console.WriteLine(„Prvky pole :"); for (int i=0; i < myArray.Length; i++) Console.WriteLine(myArray[i]); } Výstup ?

Příklad použití Ref parametrů Zdrojový kódVýstup Prvky pole: using System; class TestRef { static public void FillArray(ref int[] myArray) { // Pokud pole není vytvořené vytvořím ho: if (arr == null) arr = new int[10]; // Pokud je vytvořené naplním ho: arr[0] = 123; arr[4] = 1024; } static public void Main() { int[] myArray = {1,2,3,4,5}; // Inicializace // Předání parametru pole funkci s použitím ref: FillArray(ref myArray); // Zobrazím prvky pole: Console.WriteLine(„Prvky pole :"); for (int i=0; i < myArray.Length; i++) Console.WriteLine(myArray[i]); }

Úkol Vytvořte program, který bude obsahovat dvě globální proměnné global_x, global_y. Vytvořte funkci na sčítání dvou čísel secti_a_inkrementuj_val(int param_x, param_y) a funkci secti_a_inkrementuj_ref(ref int param_x, ref int param_y). Obě funkce budou volány z funkce Main a jako parametry do nich budou vstupovat naše globální proměnné. Funkce pouze sečtou hodnoty parametrů a zvýší jejich hodnotu o jedničku. Pomocí nástroje ladění kontrolujte chování hodnot v průběhu Vaší aplikace. Jednotlivé změny hodnot vypište s příslušným komentářem na konzoli.

20 Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí Použité materiály: Kniha: Programujeme profesionálně, nakladatelství WROX, autor: Jay Glynn,… Seriály o programování v jazyce C# :