CSharp:Tipi generici
From Aino Wiki
Tutorial
Microsoft 1
Tutorial Point
Il tipo T è praticamente un segnaposto di un qualsiasi tipi semplice o classe.
Esempi
Tipi oggetto generico
E' possibile definire property di oggetti di un tipo che è funzione di altri.
Segue un esempio in cui si definisce una property di un tipo fondamentale a cui si associano altre info visualizzabili come attributi in fase di serializzazione in XML.
Il seguente è per aggiungere 2 info come attributi dell'elemento base T legato ad una property.
In altro modo potremmo dire che risolve il problema di aggiungere da 1 a n attributi ad un elemento di un XML legato ad una property serializzata.
Dapprima definiamo la funzione che fungerà da tipo per una property.
public class GenericValue<T> { public GenericValue() : this(default(T), DateTime.MinValue, null) { } public GenericValue(T value, DateTime lastUpdateUTC) : this(value, lastUpdateUTC, null) { } public GenericValue(T value, DateTime lastUpdateUTC, string unit) { Value = value; LastUpdateUTC = lastUpdateUTC; Unit = unit; } [XmlText] public T Value { get; set; } [XmlAttribute("LastUpdateUTC")] public DateTime LastUpdateUTC { get; set; } public bool ShouldSerializeLastUpdateUTC() { return (LastUpdateUTC.Year > 1900); } [XmlAttribute("unit")] public string Unit { get; set; } public bool ShouldSerializeUnit() { return (!string.IsNullOrEmpty(Unit)); } }
Ora in una classe andremo a definire una property a cui assegniamo come tipo la classe prima definita e a seconda dei parametri forniti aggiungerà uno o due attributi (nell'XML risultante la serializzazione).
[XmlElement("Speed")] public GenericValue<double> Speed { get; set; }
Ora vediamo l'assegnazione della Property al valore voluto con o senza i due attributi 'LastUpdateUTC' e 'Unit' ("knots"):
nauticalInfo.Speed = new GenericValue<double>(20, currSpeed.LastUpdateUTC.Value, "knots");
Serializzando otterremo l'XML (20 sarà il valore della property 'Speed'):
... <Speed LastUpdateUTC="2014-09-17 09:30:123" Unit="knots">20</Speed> ...