Ho postato la richiesta di funzionalità di # ac qui ; tuttavia, non prendo molta attenzione lì. Quindi ti chiedo qui, cosa ne pensi.
Le parole chiave in
e out
nelle dichiarazioni di tipo generico sono utili; tuttavia, a causa della loro natura, la loro applicazione è limitata a un numero limitato di tipi. Quello che sto suggerendo qui, è di essere in grado di usarli in dichiarazioni di variabili, campi, parametri e possibilmente proprietà al fine di limitare l'insieme di possibili operazioni su qualsiasi tipo generico in modo dinamico e temporaneo. Ciò aumenterebbe considerevolmente i casi in cui potrebbe essere utilizzata la co- e la contravarianza.
Esempi
// A List of a more derived type can be passed
public void ReadList(IList<out MyType> list)
{
MyType item = list[0]; // OK
list[0] = new MyType(); // DISALLOWED because of "out" keyword!
list.Add(new MyType()); // DISALLOWED because of "out" keyword!
}
// A List of a less derived type can be passed
public void WriteList(List<in MyType> list)
{
MyType item = list[0]; // DISALLOWED because of "in" keyword!
list[0] = new MyType(); // OK
list.Add(new MyType()); // OK
}
-
Aggiorna
Preso queste dichiarazioni
class LessDerived { }
class MyType : LessDerived { }
class MoreDerived : MyType { }
Potresti usare i metodi mostrati sopra in questo modo
var listOfLessDerived = new List<LessDerived>();
var listOfMyType = new List<MyType >();
var listOfMoreDerived = new List<MoreDerived>();
ReadList(listOfMyType);
ReadList(listOfMoreDerived);
WriteList(listOfMyType);
WriteList(listOfLessDerived);