Metoder i C Sharp. Klassemetoder Metoder i c#

i leksjon 16 snakket meth om klasser, vel, jeg fortsetter med dette emnet.
Han erklærte variabler offentlige; generelt anbefales det ikke å erklære dem offentlige hvis bare metoder fungerer med dem. Disse variablene kalles fra hvilken som helst del av koden ved hjelp av klasseobjekter. Vel, generelt er det ikke bare denne modifikatoren (offentlig), det er 3 til: interne - variabler er tilgjengelige innenfor 1 navneområde, private - variabler er kun tilgjengelige innenfor klassen, og beskyttede - nesten det samme som private, men bare variabler er også tilgjengelige for etterkommerklasser. Og om metoder, de kan også ha de samme modifikatorene (offentlige, private osv.) og kan returnere en verdi (int, double, bool osv.) og hvis en metode returnerer en verdi, må den ha parametere (som er det som en metode i parentes), er de erklært som variabler og atskilt med komma, og når du kaller en metode på dem, er verdiene for dem spesifisert i den rekkefølgen de er deklarert. Og la oss lage en konsollkalkulator. Her er koden:

Bruke System; //koble navneromsklassen Program ( /* * tilordne 2 private variabler * av typen dobbel, modifikatoren kan * ikke spesifiseres siden den er * privat som standard */ dobbel FN = 0.0; dobbel SN = 0.0; offentlig void SetFNandSN ( ) //lag en offentlig metode som ikke returnerer en verdi ( Console.WriteLine(); Console.Write("Skriv inn det første tallet: "); FN = Convert.ToDouble(Console.ReadLine()); Console.Write( "Skriv inn det andre tallet : "); SN = Convert.ToDouble(Console.ReadLine()); /* * kall opp SimpleCalculate-metoden * og det er ikke nødvendig å lage et objekt siden * metoden er i samme klasse */ SimpleCalculate(); ) void SimpleCalculate() / /opprett en privat metode fordi den bare kalles fra denne klassen ( Console.WriteLine(); Console.WriteLine("Sum: " + (FN + SN)); Console.WriteLine( "Differanse: " + (FN - SN) ); Console.WriteLine("Kvotient: " + (FN / SN)); Console.WriteLine("Produkt: " + (FN * SN)); Console.WriteLine(); ) ) klasse DemoProgram ( statisk int Main() ( Program ob = nytt Program(); //opprett et nytt objekt int intvar1 = 0; Console.WriteLine("Hvor mange ganger skal jeg utføre beregningen?"); intvar1 = Convert.ToInt32(Console.ReadLine()); //konverter svaret vårt til int type for(int i = 0; i< intvar1; i++) { ob.SetFNandSN(); //вызываем метод } Console.ReadKey(); //ожидаем нажатия любой клавиши return 0; //возвращаем значение 0 т.к Main() должен возвращать значение int } }

Og forresten, verdier returneres ved å bruke nøkkelordet retur. Dessuten kan Main()-metoden, som andre metoder, returnere en verdi (jeg gjorde dette for å vise bruken av returoperatoren).

Å bruke og lage metoder i et C#-program ligner på mange måter tilnærmingen du allerede kjenner fra C++. La oss se på dette mer detaljert. I C# er enhver metode en metode av en eller annen klasse. For eksempel:

Bruke System; klasse Mann( offentlig strengnavn; offentlig int alder; offentlig mann(streng n,int a)( navn = n; alder = a; ) offentlig void Vis())( Console.WriteLine("Navn = "+navn+"\tAlder = "+alder); ) ) klasse Sample ( static void Main() ( try( Man obj = new Man("Fire",56); obj.Show(); ) catch(Exception er)( Console.WriteLine(er) . Melding); ) Console.Read(); ) )

I dette eksemplet har vi en Man-klasse med en Vis-metode og en konstruktør. Vær oppmerksom på at ved siden av Vis er det en spesifikasjon for offentlig tilgang. Hvis du ikke spesifiserer den, blir den satt til privat som standard, og du vil ikke kunne ringe den fra Sample-klassen. For å returnere verdier og avslutte en metode, akkurat som i C++, brukes returoperatoren. Bruksprinsippet er demonstrert i eksemplet:

Bruke System; 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 ble bestått for divisjon"); return; ) Console.WriteLine(" Resultat = ",(x+y)/t); ) ) klasse Eksempel ( statisk tomrom Main () ( try( SomeClass obj = new SomeClass(2,3); Console.WriteLine("Summen er = "+obj.Summa()); obj.Test(0); ) catch(Exception er)( Console. WriteLine (er.Message); ) Console.Read(); ) )

Passerer parametere

I C# er det to måter å sende parametere til en metode, etter verdi og ved referanse. I det første tilfellet er det ikke den opprinnelige variabelen som kommer inn i metoden. og kopien, som blir ødelagt når metoden avsluttes uten å påvirke den opprinnelige variabelen. Når du overfører verdier av vanlige typer som int, double, etc. til metoden. Pass by-verdi brukes. Derfor, når du endrer en parameter, er det ingen effekt på den opprinnelige variabelen. For eksempel:

Bruke System; klasse 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 Sample ( 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(Unntak er)( Console.WriteLine(er.Message); ) Console.Read(); ) )

Det er lett å legge merke til at testvariabelen ikke endret verdien etter å ha sendt den til TryToSetTo99. La oss nå se på den andre metoden for å sende parametere - ved referanse. I dette tilfellet sendes ikke en kopi av den beståtte parameteren, men en lenke til det originale objektet, som lar deg endre originalen. Klasseobjekter sendes alltid automatisk ved referanse. For eksempel:

Bruke System; klasse 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); // sendt av referanse Console.WriteLine(obj.x+" "+obj. y); // 1 2 ) catch(Unntak er)( Console.WriteLine(er.Message); ) Console.Read(); ) )

Hvordan du endrer verdien for en variabel av typen int eller double når du sender den inn i en metode vil bli vist i neste avsnitt. I C#, som i C++. du kan overbelaste metoder. Reglene for overbelastning er de samme som i C++.

Statiske metoder

En statisk metode er en metode med den statiske modifikatoren. Forskjellen mellom en vanlig klassemetode og denne er at en metode med en statisk modifikator kan kalles uten å lage noe klasseobjekt. For eksempel:

Bruke System; class Figure( public static void Draw())( Console.WriteLine("FigureDraw"); ) ) class Sample ( static void Main() ( try(Figure.Draw(); ) catch(Exception er)( Console.WriteLine( er .Message); ) Console.Read(); ) )

Forskjeller mellom statiske metoder og vanlige metoder:

  1. Metoder med den statiske modifikatoren har ikke denne referansen.
  2. En metode med den statiske modifikatoren kan direkte (uten å spesifisere objektnavnet) bare kalle en annen statisk metode.
  3. En metode med statisk modifikator har kun direkte tilgang til statiske data.
For eksempel: ved å bruke System; class Figure( public int a; public void Line())( Console.WriteLine("***************"); ) offentlig statisk void Draw())( a = 78; // FEIL! !! en ikke statisk - medlem Console.WriteLine("FigureDraw"); Line(); //// FEIL!!! Linje er ikke en statisk - metode ) offentlig statisk tomrom Draw2(Figure t)( t.Line (); / / Og så er det mulig!!! ) ) class Sample ( static void Main() ( try( Figure.Draw(); Figure.Draw2(); ) catch(Exception er)( Console.WriteLine(er) .Message); ) Console .Read(); ) )

Metoder

Det skal bemerkes at den offisielle C#-terminologien skiller mellom funksjoner og metoder. I følge denne terminologien inkluderer begrepet en "medlemsfunksjon" ikke bare metoder, men også andre ikke-datamedlemmer av en klasse eller struktur. Dette inkluderer indeksere, operasjoner, konstruktører, destruktorer og - kanskje noe overraskende - egenskaper. De står i kontrast til datamedlemmene: felt, konstanter og hendelser.

Erklæringsmetoder

I C# består en metodedefinisjon av eventuelle modifikatorer (som en tilgjengelighetsspesifikasjon), en returtype, etterfulgt av metodenavnet, deretter en liste over argumenter i parentes, og deretter metodekroppen i krøllete klammeparenteser:

[modifikatorer] return_typeMethodName([parametere]) ( // Method body)

Hver parameter består av navnet på parametertypen og navnet som den kan nås med i hoveddelen av metoden. I tillegg, hvis en metode returnerer en verdi, må en retursetning brukes sammen med returverdien for å indikere utgangspunktet.

Hvis metoden ikke returnerer noe, er returtypen spesifisert tomrom, siden det er umulig å utelate returtypen helt. Hvis den ikke godtar argumenter, må tomme parenteser fortsatt være til stede etter metodenavnet. I dette tilfellet er det ikke nødvendig å inkludere en returoperatør i hoveddelen av metoden - metoden returnerer kontrollen automatisk når man når den avsluttende krøllete bøylen.

Retur fra metode og returverdi

Generelt kan en metode returnere under to forhold. For det første når en krøllete tannregulering påtreffes som lukker kroppen til en metode. Og for det andre, når uttalelsen blir utført komme tilbake. Det er to former for retursetningen: en for metoder av typen void ( retur fra metoden), dvs. de metodene som ikke returnerer verdier, og den andre for metoder som returnerer spesifikke verdier ( returverdi).

La oss se på et eksempel:

Bruke System; bruker System.Collections.Generic; bruker System.Linq; bruker System.Text; navneområde ConsoleApplication1 ( klasse MyMathOperation ( offentlig dobbel r; offentlig streng s; // Returnerer arealet av en sirkel offentlig dobbel sqrCircle() ( return Math.PI * r * r; ) // Returnerer omkretsen til en sirkel offentlig dobbel longCircle() ( return 2 * Math .PI * r; ) public void writeResult() ( Console.WriteLine("Beregn areal eller lengde? s/l:"); s = Console.ReadLine(); s = s.ToLower (); if (s == "s") ( Console.WriteLine("Arealet til sirkelen er (0:#.###)", sqrCircle()); return; ) else if (s = = "l") ( Console.WriteLine("Sirkellengde er lik (0:#.##)",longCircle()); return; ) else ( Console.WriteLine("Du skrev inn feil tegn"); ) ) ) klasse Program ( static void Main(string args) ( Console. WriteLine("Enter radius: "); strengradius = Console.ReadLine(); MyMathOperation newOperation = new MyMathOperation ( r = double.Parse(radius) ); newOperation.writeResult (); Console.ReadLine(); ) ) )

Bruke parametere

Når du kaller en metode, kan du sende en eller flere verdier til den. Verdien som sendes til metoden kalles argument. Og variabelen som mottar argumentet kalles en formell parameter, eller ganske enkelt parameter. Parametre er deklarert i parentes etter metodenavnet. Syntaksen for å deklarere parametere er den samme som for variabler. Og omfanget av parametere er selve metoden. Bortsett fra spesielle tilfeller av å sende argumenter til en metode, fungerer parametere akkurat som alle andre variabler.

Generelt kan parametere sendes til en metode enten ved verdi eller ved referanse. Når en variabel sendes ved referanse, mottar den kalte metoden selve variabelen, så alle endringer den gjør i metoden vil forbli gjeldende etter at metoden er fullført. Men hvis en variabel sendes av verdi, mottar den kalte metoden en kopi av den variabelen, noe som betyr at eventuelle endringer i den vil gå tapt når metoden avsluttes. For komplekse datatyper er referanseoverføring mer effektivt på grunn av den store mengden data som må kopieres når du passerer etter verdi.

La oss se på et eksempel:

Bruke System; bruker System.Collections.Generic; bruker System.Linq; bruker System.Text; navneområde ConsoleApplication1 ( class myClass ( public void someMethod(double myArr, int i) ( myArr = 12.0; i = 12; ) ) class Program ( static void Main(string args) ( double arr1 = ( 0, 1.5, 3.9, 5.1 ) ; int i = 0; Console.WriteLine("Array arr1 før oppkalling av metoden: "); foreach (dobbel d i arr1) Console.Write("(0)\t",d); Console.WriteLine("\nVariable i = (0)\n",i); Console.WriteLine("Calling the someMethod-metoden..."); myClass ss = new myClass(); ss.someMethod(arr1,i); Console.WriteLine("Array arr1 etter metodekall:"); foreach (dobbel d i arr1) Console.Write("(0)\t",d); Console.WriteLine("\nVariable i = (0)\n",i); Console .ReadLine (); ) ) )

Metoder i C Sharp | C#

Metoder er skrevet kode som brukes mange ganger (kalt mange ganger). Og for å forenkle programkoden er det veldig viktig å bruke metoden. Metode er et nytt ord i C Sharp-språket, det gamle ordet er funksjon.

Metodene er logiske hvis denne koden kjøres mer enn 2 ganger. Da er det lettere å deklarere navnet på metoden, hvilke verdier den godtar, og skrive kode som vil kjøre riktig for alle verdiene som metoden godtar.

For å erklære metoder i C#, må du skrive følgende:

RETURN_VALUE_TYPE FUNCTION_NAME (VARIABLER) (METHOD_CODE)

Hvis du ikke trenger å returnere noe, kan du skrive RETURN_VALUE_TYPE - void .

1. En funksjon som ikke returnerer en verdi og ikke aksepterer argumenter:

void printError()
{
Console .Write("Feil! Trykk på tasten..." );
Console .ReadKey();
}

2. En funksjon som ikke returnerer en verdi, men tar et argument:

void printError(string s)
{
Console .Write("Feil! " + s + "Trykk tast..." );
Console .ReadKey();
}

3. En funksjon som ikke returnerer en verdi, men aksepterer argumenter:

void printError(streng s, int i)
{
Console .Write("Feil! " + s + " " + i + "Trykk tast..." );
Console .ReadKey();
}

3. En funksjon som returnerer verdier og tar argumenter:

char shifr(char x, int shifr)
{
x = (char)(x + shifr);
returner x;
}

Her er et eksempel på et program som bruker metoder: arbeide med metoder...

Du kan også angi beskyttelsesnivået for metoden: privat, offentlig.

For eksempel:

privat char shifr(char x, int shifr)
{
x = (char)(x + shifr);
returner x;
}

offentlig char shifr(char x, int shifr)
{
x = (char)(x + shifr);
returner x;
}