1. Wprowadzenie do C#
  2. Szybki start
  3. Pierwszy program
  4. Komentarze
  5. Typy danych
  6. Zmienne
  7. Pola
  8. Właściwości
  9. Stałe
  10. Metody
  11. Instrukcje warunkowe
  12. Pętle
  13. Tablice
  14. Kolekcje
  15. Klasy
  16. Dziedziczenie
  17. Polimorfizm
  18. Konwersja typów
  19. Właściwości klasy String
  20. Typy wyliczeniowe
  21. Interfejsy
  22. Klasy statyczne
  23. Klasy Abstrakcyjne
  24. Przestrzenie nazw
  25. Wyjątki
  26. Typy generyczne
  27. JSON
  28. XML
  29. Podsumowanie

Przekazywanie

parametrów do metod

W języku C# istnieją trzy sposoby przekazywania parametrów do metod: przez wartość, przez referencję oraz przez wartość i referencję. Każdy z tych sposobów ma swoje wady i zalety i może być używany w zależności od potrzeb programu.

Parametry typu Wartościowego

Parametry typu wartościowego są przekazywane do funkcji lub metody jako kopia wartości, a nie jako referencja do oryginalnego obiektu. Oznacza to, że wewnątrz funkcji można dokonywać zmian na kopii wartości przekazanej jako argument, ale nie mają one wpływu na oryginalny obiekt.

								
using System;

class Program
{
    static void Main(string[] args)
    {
        // Przekazanie zmiennej typu int wartość 100
        int a = 100;

        Console.WriteLine("Przed wywołaniem metody: a = {0}", a);

        Zmien(a);

        Console.WriteLine("Po wywołaniu metody: a = {0}\n", a);

        // Przekazanie zmiennej typu bool przez wartość
        bool c = true;

        Console.WriteLine("Przed wywołaniem metody: c = {0}", c);

        Zmien(c);

        Console.WriteLine("Po wywołaniu metody: c = {0}", c);
    }

    static void Zmien(int x)
    {
        x++;
    }

    static void Zmien(bool x)
    {
        x = !x;
    }
}
								
						
Notatka

Wewnątrz metody mamy do czynienia z kopią argumentu, a nie z oryginalnym obiektem. Zmiany wprowadzone w obiekcie wewnątrz metody nie wpływają na oryginalny obiekt poza metodą.

Parametry typu Referencyjnego

Parametry typu referencyjnego są przekazywane do funkcji lub metody jako referencja do oryginalnego obiektu, a nie jako kopia wartości. Oznacza to, że zmiany wprowadzone do referencji wewnątrz funkcji mają wpływ na oryginalny obiekt przekazany jako argument.

								
using System;

class Program
{
    static void Main(string[] args)
    {
        Test t1 = new Test();  // Utworzenie obiektu klasy Test
        t1.x = 10;
        t1.y = 20;

        // Przekazanie obiektu przez referencję
        Console.WriteLine("Przed wywołaniem metody: t1.x = {0}, t1.y = {1}\n", t1.x, t1.y);
        Zmien(ref t1);
        Console.WriteLine("Po wywołaniu metody: t1.x = {0}, t1.y = {1}", t1.x, t1.y);
    }

    // Metoda z parametrem typu referencyjnego
    static void Zmien(ref Test t)
    {
        t.x++;
        t.y++;
    }
}

// Klasa Test z polami x i y typu int
class Test
{
    public int x;
    public int y;
}

								
						
Notatka

Parametr referencyjny jest definiowany przez użycie słowa kluczowego ref. Wewnątrz metody mamy bezpośredni dostęp do oryginalnego obiektu i jakiekolwiek zmiany wprowadzone w obiekcie wewnątrz metody wpływają na oryginalny obiekt poza metodą.

Parametry typu Wyjściowego

Parametry typu wyjściowego są używane, gdy funkcja musi zwrócić więcej niż jedną wartość, a wartości te nie mogą być zwracane przez wartość zwracaną funkcji lub przez zmianę stanu obiektu.

								
using System;

class Program
{
    static void Main(string[] args)
    {
        int wynik;  // Zmienna, do której będzie przypisany wynik działania

        Podziel(15, 3, out wynik);   // Wywołanie metody z parametrem typu wyjściowego

        Console.WriteLine("Wynik: {0}", wynik);  // Wyświetlenie wyniku
    }

    // Metoda z parametrem typu wyjściowego
    static void Podziel(int a, int b, out int wynik)
    {
        wynik = a / b;
    }
}

								
						
Notatka

parametry typu wyjściowego muszą być zainicjowane wewnątrz metody, a ich wartość musi być przypisana przed opuszczeniem metody. W przeciwnym razie program wygeneruje wyjątek typu InvalidOperationException.