Menu
Jest wolny
rejestracja
Dom  /  Instalacja i konfiguracja/ Metody. Klasy i metody Rodzaje metod c

Metody. Klasy i metody Rodzaje metod c

na lekcji 16 Met mówił o zajęciach, cóż, będę kontynuował ten temat.
Zadeklarował zmienne jako public (public), generalnie nie zaleca się deklarowania ich jako publicznych, jeśli działają z nimi tylko metody. Te zmienne z dowolnej części kodu są wywoływane przy użyciu obiektów klasy. Ogólnie rzecz biorąc, istnieje nie tylko ten modyfikator (public), są jeszcze 3: wewnętrzne - zmienne są dostępne w obrębie 1 przestrzeni nazw, prywatne - zmienne są dostępne tylko w ramach klasy i chronione - prawie tak samo jak prywatne, ale tylko zmienne są również dostępne dla klas dziedziczonych. A jeśli chodzi o metody, mogą również mieć te same modyfikatory (public, private, itp.) i mogą zwracać wartość (int, double, bool itp.), a jeśli metoda zwraca wartość, musi mieć parametry (czyli metody w nawiasach), są one deklarowane jako zmienne i oddzielone przecinkami, a gdy metoda jest wywoływana, ich wartości są określane w kolejności ich deklarowania. I zróbmy kalkulator konsoli. Oto kod:

Korzystanie z systemu; // połącz klasę przestrzeni nazw Program (/ * * przypisz 2 prywatne zmienne * typu double modyfikator * nie może być określony, ponieważ jest domyślnie prywatny * / double FN = 0.0; double SN = 0.0; public void SetFNandSN() / / utwórz publiczną metodę, która nie zwraca wartości (Console.WriteLine (); Console.Write ("Wprowadź numer 1:"); FN = Convert.ToDouble (Console.ReadLine ()); Console.Write ("Enter 2 number : "); SN = Convert.ToDouble (Console.ReadLine ()); / * * wywołaj metodę SimpleCalculate * i nie musisz tworzyć obiektu, ponieważ * metoda w tej samej klasie * / SimpleCalculate ();) void SimpleCalculate() // utwórz metodę prywatną, ponieważ jest wywoływana tylko z tej klasy (Console.WriteLine (); Console.WriteLine ("Sum:" + (FN + SN)); Console.WriteLine ("Różnica:" + (FN - SN) ); Console.WriteLine („Prywatne:” + (FN / SN)); Console.WriteLine („Produkt:” + (FN * SN)); Console.WriteLine ();)) klasa DemoProgram ( static int Main () (Program ob = nowy Program () ; // utwórz nowy obiekt int intvar1 = 0; Console.WriteLine („Ile razy wykonać obliczenia?”); intvar1 = Convert.ToInt32 (Console.ReadLine()); // zamień naszą odpowiedź na int for (int i = 0; i< intvar1; i++) { ob.SetFNandSN(); //вызываем метод } Console.ReadKey(); //ожидаем нажатия любой клавиши return 0; //возвращаем значение 0 т.к Main() должен возвращать значение int } }

A tak przy okazji, wartości zwracane są za pomocą słowa kluczowego return. Ponadto metoda Main(), podobnie jak inne metody, może zwrócić wartość (zrobiłem to, aby pokazać użycie instrukcji return).

Metody

Należy zauważyć, że oficjalna terminologia C# rozróżnia funkcje i metody. W tej terminologii termin „funkcja składowa” obejmuje nie tylko metody, ale także inne składowe klasy lub struktury, które nie są danymi. Obejmuje to indeksatory, operacje, konstruktory, destruktory i - być może nieco nieoczekiwanie - właściwości. Kontrastują one z członkami danych: polami, stałymi i zdarzeniami.

Deklaracja metody

W C# definicja metody składa się z dowolnych modyfikatorów (takich jak specyfikacja dostępności), typu zwracanego, po którym następuje nazwa metody, następnie lista argumentów w nawiasach, a następnie treść metody w nawiasach klamrowych:

[modyfikatory] return_type MethodName ([parametry]) (// Treść metody)

Każdy parametr składa się z nazwy typu parametru i nazwy, za pomocą której można się do niego odwoływać w treści metody. Ponadto, jeśli metoda zwraca wartość, wówczas instrukcja return musi być użyta wraz z wartością zwracaną, aby wskazać punkt wyjścia.

Jeśli metoda nic nie zwraca, określany jest typ zwracany próżnia ponieważ nie można w ogóle pominąć typu zwracanego. Jeśli nie przyjmuje żadnych argumentów, po nazwie metody nadal muszą znajdować się puste nawiasy. W takim przypadku nie jest konieczne umieszczanie instrukcji return w treści metody — metoda automatycznie zwraca kontrolkę po osiągnięciu zamykającego nawiasu klamrowego.

Powrót z metody i zwrócenie wartości

Ogólnie rzecz biorąc, zwrot z metody może nastąpić pod dwoma warunkami. Po pierwsze, gdy zostanie napotkany nawias klamrowy, który obejmuje treść metody. A po drugie, kiedy instrukcja jest wykonywana powrót... Istnieją dwie formy instrukcji return: jedna dla metod typu void ( powrót z metody), tj. te metody, które nie zwracają wartości, a druga dotyczy metod zwracających określone wartości ( wartość zwrotu).

Weźmy przykład:

Korzystanie z systemu; za pomocą System.Collections.Generic; za pomocą System.Linq; za pomocą System.Text; namespace ConsoleApplication1 (klasa MyMathOperation (public double r; public string s; // zwraca obszar okręgu public double sqrCircle()) (return Math.PI * r * r;) // zwraca obwód public double longCircle () (return 2 * Math .PI * r;) public void writeResult () (Console.WriteLine ("Oblicz obszar lub długość? S / l:"); s = Console.ReadLine (); s = s.ToLower (); if (s == "s") (Console.WriteLine ("Obszar okręgu to (0: #. ###)", sqrCircle ()); return;) else if (s == "l ") (Console.WriteLine ("Długość okręgu równa się (0: #. ##) ", longCircle ()); return;) else (Console.WriteLine (" Wprowadziłeś zły znak ";))) class Program (static void Main (args string) (Console. WriteLine ("Wprowadź promień:"); string promieni = Console.ReadLine (); MyMathOperation newOperation = new MyMathOperation (r = double.Parse (radius)); newOperation.writeResult) (); Konsola.ReadLine (;)))

Korzystanie z parametrów

Wywołując metodę, możesz przekazać do niej jedną lub więcej wartości. Wartość przekazana do metody nosi nazwę argument... A zmienna, która przyjmuje argument, nazywa się parametrem formalnym lub po prostu parametr... Parametry są deklarowane w nawiasach po nazwie metody. Składnia deklarowania parametrów jest taka sama jak w przypadku zmiennych. A zakres parametrów to treść metody. Z wyjątkiem specjalnego przypadku przekazywania argumentów do metody, parametry zachowują się jak każda inna zmienna.

Ogólnie parametry można przekazać do metody przez wartość lub przez odwołanie. Gdy zmienna jest przekazywana przez odwołanie, wywoływana metoda pobiera samą zmienną, więc wszelkie zmiany, jakie przechodzi w metodzie, będą obowiązywać po jej zakończeniu. Ale jeśli zmienna jest przekazywana przez wartość, wywoływana metoda otrzymuje kopię tej zmiennej, co oznacza, że ​​wszelkie zmiany wprowadzone w niej po zakończeniu metody zostaną utracone. W przypadku złożonych typów danych przekazywanie przez odwołanie jest bardziej wydajne ze względu na dużą ilość danych, które należy skopiować podczas przekazywania przez wartość.

Weźmy przykład:

Korzystanie z systemu; za pomocą System.Collections.Generic; za pomocą System.Linq; za pomocą System.Text; namespace ConsoleApplication1 (class myClass (public void someMethod (double myArr, int i) (myArr = 12.0; i = 12;)) class Program (static void Main (args string) (double arr1 = (0, 1.5, 3.9, 5.1) ;int i = 0; Console.WriteLine ("tablica Arr1 przed wywołaniem metody:"); foreach (podwójne d w arr1) Console.Write ("(0) \ t", d); Console.WriteLine ("\ nVariable i = (0) \ n ", i); Console.WriteLine (" Wywołanie metody someMethod ... "); myClass ss = new myClass (); ss.someMethod (arr1, i); Console.WriteLine (" Arr1 tablica po wywołaniu metody: "); foreach (podwójne d w arr1) Console.Write (" (0) \ t", d); Console.WriteLine (" \ nVariable i = (0) \ n ", i); Console. .ReadLine();)))

Używanie i tworzenie metod w programie C# jest bardzo podobne do podejścia C++, które już znasz. Rozważmy to bardziej szczegółowo. W C# każda metoda jest metodą jakiejś klasy. Na przykład:

Korzystanie z systemu; class Man (publiczna nazwa ciągu; public int wiek; public Man (ciąg n, int a) (nazwa = n; wiek = a;) public void Show () (Console.WriteLine ("Nazwa =" + nazwa + "\ tAge = "+ wiek);)) class Sample (static void Main () (try (Man obj = new Man (" Fire ", 56); obj.Show ();) catch (Exception er)) (Console.WriteLine (er Wiadomość);) Konsola.Czytaj (;))

W tym przykładzie mamy klasę Man z metodą Show i konstruktorem. Uwaga obok Pokaż to specyfikator dostępu publicznego. Jeśli go nie określisz, domyślnie zostanie ustawione private i nie będziesz mógł go wywołać z klasy Sample. Do zwracania wartości i wyjścia z metody, podobnie jak w C++, używana jest instrukcja return. Zasada użytkowania jest pokazana na przykładzie:

Korzystanie z systemu; class SomeClass (public float x; public float y; public SomeClass (float a, float b) (x = a; y = b;) public float Summa () (return x + y;) public void Test (float t) ( if (t == 0) (Console.WriteLine ("0 zostało przekazane do podziału"); return;) Console.WriteLine ("Result =", (x + y) / t);)) class Sample (static void Main () (spróbuj (SomeClass obj = new SomeClass (2,3)); Console.WriteLine ("Suma = = + obj.Summa ()); obj.Test (0);) catch (Wyjątek) (Console.WriteLine (er.Wiadomość);) Konsola.Czytaj (;))

Przekazywanie parametrów

W języku C# istnieją dwa sposoby przekazywania parametrów do metody według wartości i przez odwołanie. W pierwszym przypadku to nie oryginalna zmienna dostaje się do metody. i jego kopię, która jest niszczona, gdy metoda kończy działanie, bez wpływu na oryginalną zmienną. Podczas przekazywania do metody wartości typowych typów, takich jak int, double itp. używane jest przekazywanie według wartości. Dlatego zmiana parametru nie ma wpływu na oryginalną zmienną. Na przykład:

Korzystanie z systemu; class SomeClass (public float x; public SomeClass (float a) (x = a;) public void TryToSetTo99 (float res) (res = 99;) public float Mult (float res) (return res * x;)) class Przykład ( static void Main() (try (SomeClass obj = new SomeClass (2); float test = 5; obj.TryToSetTo99 (test); Console.WriteLine (test); // 5 Console.WriteLine (obj.Mult (test)) ; // 10) catch (wyjątek) (Console.WriteLine (er.Message);) Console.Read ();))

Łatwo zauważyć, że zmienna testowa nie zmieniła swojej wartości po przekazaniu jej do TryToSetTo99.A teraz spójrzmy na drugi sposób przekazywania parametrów - przez referencję. W takim przypadku nie jest przekazywana kopia przekazanego parametru, ale odwołanie do oryginalnego obiektu, co pozwala na modyfikację oryginału. Obiekty klasy są zawsze automatycznie przekazywane przez referencję. Na przykład:

Korzystanie z systemu; class SomeClass (public int x; public int y;) class SomeClass2 (public void Set (SomeClass obj) (obj.x = 1; obj.y = 2;)) class Sample (static void Main () (try (SomeClass obj) = new SomeClass (); SomeClass2 obj2 = new SomeClass2 (); obj.x = 8; obj.y = 9; obj2.Set (obj); // przekazywane przez odwołanie Console.WriteLine (obj.x + "" + obj .y); // 1 2) catch (wyjątek) (Console.WriteLine (er.Message);) Console.Read ();))

Jak zmienić wartość zmiennej typu int lub double podczas przekazywania jej wewnątrz metody, zostanie pokazane w następnej sekcji. W C# jak iw C++. metody mogą być przeciążone. Zasady przeciążania są takie same jak w C++.

Metody statyczne

Metoda statyczna to metoda z modyfikatorem static. Różnica między zwykłą metodą klasy a taką polega na tym, że metodę z modyfikatorem statycznym można wywołać bez tworzenia obiektu klasy. Na przykład:

Korzystanie z systemu; class Figure (public static void Draw () (Console.WriteLine ("FigureDraw"));)) class Sample (static void Main () (spróbuj (Figure.Draw ();) catch (Exception er)) (Console.WriteLine (er .Wiadomość);) Konsola.Czytaj (;))

Różnice między metodami statycznymi a zwykłymi:

  1. Metody z modyfikatorem static nie mają tego odwołania.
  2. Metoda z modyfikatorem static może bezpośrednio (bez określania nazwy obiektu) wywołać tylko inną metodę statyczną.
  3. Metoda z modyfikatorem static ma tylko bezpośredni dostęp do danych statycznych.
Na przykład: za pomocą Systemu; class Figure (public int a; public void Line () (Console.WriteLine ("*************"));) public static void Draw () (a = 78; // BŁĄD! a niestatyczna - element Console.WriteLine ("FigureDraw");Linia ();// // BŁĄD !!!Linia nie jest statyczna - metoda) public static void Draw2 (Rysunek t) (t.Line (); / / A więc możesz !!!)) class Sample (statyczny void Main () (spróbuj (Figure.Draw (); Figure.Draw2 ();) catch (Exception er)) (Console.WriteLine (er.Message); ) Konsola .Czytaj (;))

Metody w Sea Sharp | C #

Metody to napisany kod, który jest wielokrotnie używany (wywoływany wielokrotnie). Aby uprościć kod programu, bardzo ważne jest użycie metody. Metoda to nowe słowo w języku C Sharp, stare słowo to funkcja.

Metody są logiczne, jeśli dany kod jest wykonywany więcej niż 2 razy. Wtedy łatwiej jest zadeklarować nazwę metody, jakie wartości akceptuje i napisać kod, który wykonałby się poprawnie dla wszystkich wartości, które metoda akceptuje.

Aby zadeklarować metody w C#, musisz napisać:

RETURN_VALUE_TYPE NAZWA FUNKCJI (ZMIENNE) (KOD_METODY)

Jeśli nie musisz czegoś zwracać, możesz napisać w TYPE_RETURNED_VALUE - void.

1. Funkcja, która nie zwraca wartości i nie przyjmuje argumentów:

void printError ()
{
Konsola .Write ("Błąd! Naciśnij klawisz ...");
Konsola .ReadKey ();
}

2. Funkcja, która nie zwraca wartości, ale przyjmuje argument:

void printError (ciąg s)
{
Konsola .Write ("Błąd!" + S + "Naciśnij klawisz ...");
Konsola .ReadKey ();
}

3. Funkcja, która nie zwraca wartości, ale przyjmuje argumenty:

void printError (ciąg s, int i)
{
Konsola .Write ("Błąd!" + S + "" + i + "Naciśnij klawisz...");
Konsola .ReadKey ();
}

3. Funkcja zwracająca wartości i pobierająca argumenty:

znak shifr (znak x, int shifr)
{
x = (znak) (x + przesunięcie);
powrót x;
}

Oto przykładowy program wykorzystujący metody: praca z metodami...

Możesz również ustawić poziom bezpieczeństwa na metodę: prywatny, publiczny.

Na przykład:

prywatny znak shifr (znak x, int shifr)
{
x = (znak) (x + przesunięcie);
powrót x;
}

publiczny znak shifr (znak x, int shifr)
{
x = (znak) (x + przesunięcie);
powrót x;
}