Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

CSharp:Tipi generici

From Aino Wiki

Jump to: navigation, search

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>
...



C#


Visual Studio

Author