[c#] Perché C # non supporta il ritorno dei riferimenti?


1 Answers

Stai parlando di metodi che restituiscono un riferimento a un tipo di valore. L'unico esempio incorporato in C # che io conosca è l'accessorio di array di un tipo di valore:

public struct Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

e ora crea una matrice di quella struttura:

var points = new Point[10];
points[0].X = 1;
points[0].Y = 2;

In questo caso i points[0] , l' indicizzatore di array, restituisce un riferimento a struct. È impossibile scrivere il proprio indicizzatore (ad esempio per una raccolta personalizzata), che ha lo stesso comportamento "restituisce un riferimento".

Non ho progettato il linguaggio C # quindi non conosco tutti i ragionamenti alla base del non supportarlo, ma penso che la risposta breve potrebbe essere: possiamo andare d'accordo senza.

Question

Ho letto che .NET supporta il ritorno dei riferimenti, ma C # non lo fa. C'è una ragione speciale? Perché non posso fare qualcosa come:

static ref int Max(ref int x, ref int y) 
{ 
  if (x > y) 
    return ref x; 
  else 
    return ref y; 
} 



C # 7.0 ha il supporto per la restituzione dei riferimenti. Vedi la mia risposta here .






Related