• 28.04.2017
  • 4 minute de citit

In acest articol

Incepand cu C # 7.0, limba C # accepta valorile de returnare de referinta . O modalitate de a intelege valorile returnate de referinta este ca acestea sunt opusul argumentelor care sunt transmise prin referire la o metoda. Cand un argument transmis prin referinta este modificat, modificarile se reflecta in valoarea variabilei de pe apelant. Atunci cand o metoda furnizeaza o valoare de returnare de referinta unui apelant, modificarile aduse valorii de referinta de returnare de catre apelant sunt reflectate in datele metodei apelate.

Visual Basic nu va permite sa creati metode cu valori de returnare de referinta, dar va permite sa consumati valori de returnare de referinta. Cu alte cuvinte, puteti apela o metoda cu o valoare de returnare de referinta si puteti modifica acea valoare de returnare, iar modificarile la valoarea de returnare de referinta sunt reflectate in datele metodei apelate.

Modificarea directa a valorii de returnare a ref

Pentru metodele care reusesc intotdeauna si nu au parametri ByRef, puteti modifica direct valoarea de returnare de referinta. Faceti acest lucru atribuind noua valoare expresiilor care returneaza valoarea returnata de referinta.

Urmatorul exemplu C # defineste o metoda NumericValue.IncrementValue care mareste o valoare interna si o returneaza ca valoare returnata de referinta.

utilizarea sistemului; public class NumericValue {private int value = 0; public NumericValue (valoare int) {this.value = valoare; } public ref int IncrementValue () {value ++; returneaza valoarea ref; } public int GetValue () {return value; }}

Valoarea returnata de referinta este apoi modificata de apelant in urmatorul exemplu Visual Basic. Retineti ca linia cu apelul metodei NumericValue.IncrementValue nu atribuie o valoare metodei. In schimb, atribuie o valoare valorii returnate de referinta returnate de metoda.

Exemplu modul principal public principal () Dim n ca valoare numerica noua (15) n.IncrementValue () + = 12 Console.WriteLine (n.GetValue) Final iesire modul secundar final: 28

Folosind o metoda de ajutor

In alte cazuri, modificarea directa a valorii returnate a apelului de metoda nu poate fi intotdeauna de dorit. De exemplu, o metoda de cautare care returneaza un sir nu poate gasi intotdeauna o potrivire. In acest caz, doriti sa modificati valoarea returnata de referinta numai daca cautarea are succes.

Urmatorul exemplu C # ilustreaza acest scenariu. Defineste o clasa Sentence scrisa in C # include o metoda FindNext care gaseste cuvantul urmator intr-o propozitie care incepe cu un sir specificat. Sirul este returnat ca valoare returnata de referinta, iar o variabila booleana transmisa prin referire la metoda indica daca cautarea a avut succes. Valoarea returnata de referinta indica faptul ca, pe langa citirea valorii returnate, apelantul o poate modifica si aceasta modificare se reflecta in datele continute intern in clasa Sentence.

utilizarea sistemului; public class Sentence {private string [] cuvinte; private int currentSearchPointer; Fraza publica (propozitie sir) {cuvinte = propozitie.Split (”); currentSearchPointer = -1; } public ref string FindNext (string startWithString, ref bool found) {for (int count = currentSearchPointer + 1; count <words.Length; count ++) {if (words [count] .StartsWith (startWithString)) {currentSearchPointer = count; gasit = adevarat; returneaza cuvinte ref [currentSearchPointer]; }} currentSearchPointer = -1; gasit = fals; returneaza cuvinte ref [0]; } sir public GetSentence () {sir sirToReturn = nul; foreach (var cuvant in cuvinte) stringToReturn + = $ “{word}”; returneaza stringToReturn.Trim (); }}

Modificarea directa a valorii returnate de referinta in acest caz nu este fiabila, deoarece apelul metodei nu reuseste sa gaseasca o potrivire si sa returneze primul cuvant din propozitie. In acest caz, apelantul va modifica din greseala primul cuvant al propozitiei. Acest lucru ar putea fi prevenit daca apelantul returneaza un nul (sau nimic in Visual Basic). Dar, in acest caz, incercarea de a modifica un sir a carui valoare este Nimic arunca o NullReferenceException. Daca ar putea fi prevenit si de apelantul care returneaza String.Empty, dar acest lucru necesita ca apelantul sa defineasca o variabila de sir a carei valoare este String.Empty. In timp ce apelantul poate modifica acel sir, modificarea in sine nu are niciun scop, deoarece sirul modificat nu are nicio relatie cu cuvintele din propozitia stocate de clasa Sentence.

Cel mai bun mod de a gestiona acest scenariu este sa treceti valoarea de returnare de referinta prin referire la o metoda de ajutor. Metoda de asistenta contine apoi logica pentru a determina daca apelul metodei a reusit si, daca a reusit, pentru a modifica valoarea de referinta returnata. Urmatorul exemplu ofera o posibila implementare.

Module Exemplu Public Sub Main () Dim propozitie Ca propozitie noua („Acum este momentul pentru a vedea lumea.”) Dim gasit = False Dim returneaza = RefHelper (propozitie. found) Console.WriteLine (sentence.GetSentence ()) End Sub Private Function RefHelper (ByRef stringFound As String, substitut As String, success As Boolean) _ As (originalString As String, found As Boolean) Dim originalString = stringFound Daca gasit Then stringFound = inlocuire Return (originalString, gasit) Functia de sfarsit Modul de finalizare ‘Exemplul afiseaza urmatoarea iesire:’ Un moment bun pentru a vedea lumea este acum.

Vezi si

  • Trecerea argumentelor dupa valoare si prin referinta
  • Proceduri in Visual Basic

salieri porno gratis emmanuelle sex
christi dom emmanuelle streaming
italian xxx movies emmanuelle xxx
figone xxx emy spermaparty
malena sex video entoxcento
malena pugliese hard erik brummer
sissy xxx eva rubino porno
porno valentina nappi e rocco siffredi fai la cosa giusta streaming
mattcore video fake hostel xxx
la centoxcento fake taxi italia
video centopercento fake taxi italian
malena rocco siffredi porn fake taxi italiano
pornostar rebecca volpetti fake taxi italy
porno solo culo fake taxi streaming
video sex malena fake vip porn
rossella visconti porn faketaxi italia
malena rocco video faketaxi streaming
blondie italian porn famiglia italiana porn
roberta gemma video hard famiglia porn
malena adora prenderlo nel culo da ramon famiglia xxx