Recentemente ho notato che i tipi costruiti generici possono essere aperti e chiusi. Ma non capisco cosa intendano in realtà. Puoi fare un semplice esempio?Generics -Open e chiusi Tipi costruiti
risposta
In pratica la terminologia non importa molto - non riesco a ricordare l'ultima volta che ho dovuto preoccuparmene tranne quando si tenta di scrivere su di esso.
- Un non legato tipo ha argomenti tipo specificato
- Un tipo costruito ha almeno un tipo di argomento specificato
- Un parametro tipo è un tipo aperto
- Un tipo di matrice in cui il tipo di elemento è aperto è del tipo aperto
- un aperta tipo costruito ha almeno un argomento tipo che è del tipo aperto
- Un chiuso tipo è qualsiasi tipo che non è aperto
(Ci sono ulteriori regole per i tipi nidificati. . Consultare la sezione spec C# 3.0 4.4 per dettagli scabrosi)
Come esempio di un tipo di costruzione aperta, prendere in considerazione:
public class NameDictionary<T> : Dictionary<string, T>
La classe di base di typeof(NameDictionary<>)
è:
- Costruita perché specifica argomenti tipo
- Aperto perché il secondo argomento di tipo (
T
) è un tipo aperto
La documentazione MSDN per Type.IsGenericType
hanno un tavolino molto utile.
solo ribadire, questo è quasi del tutto irrilevante in uso quotidiano.
Sono generalmente favorevole alla conoscenza della terminologia corretta, in particolare per cose come "passaggio per riferimento" ecc., Ma in questo caso in realtà non si presenta molto spesso. Mi piacerebbe scoraggiarti attivamente dal preoccuparti di questo :)
Da MSDN:
Un tipo generico o metodo è chiuso se tipi istanziabili sono stati sostituiti per tutti i suoi parametri di tipo, compresi tutti i parametri di tipo di tutti i tipi racchiudono. È possibile creare un'istanza di un tipo generico solo se è chiusa.
Quindi, questo funziona come List<int>
è chiuso:
var list = Activator.CreateInstance(typeof(List<int>));
Ma questo genera un'eccezione a run-time, perché List<>
è aperta:
var list = Activator.CreateInstance(typeof(List<>));
↑
In questo caso è anche un tipo non associato - un tipo aperto e costruito è il tipo più esoterico :) –
Ho usato principalmente generici aperti (fondamentalmente generici non motivati) nelle mappature delle dipendenze. Ad esempio, qualcosa come
Bind<IRepository<>>()
.To<BasicRepository<>>()
Poi, quando il mio costruttore dell'oggetto contiene:
public SomethingController(IRepository<Something>) { ... }
mio meccanismo di iniezione di dipendenza sarà un'istanza di un BasicRepository < Qualcosa> automagicamente. (Funziona con Ninject e StructureMap e probabilmente con la libreria Castle Windsor, non sono sicuro di altri framework).
'Autofac' supporta anche i tipi generici aperti: [Autofac - creazione di componenti] (https://code.google.com/p/ autofac/wiki/ComponentCreation # Open_Generic_Types) – sgnsajgon
Così come [SimpleInjector] (http://simpleinjector.readthedocs.org/en/latest/advanced.html#registration-of-open-generic-types) –
- 1. Famiglie di tipi chiusi e tipi di funzione sconosciuti
- 2. Java Generics e tipi di reso
- 3. Qual è la relazione tra tipi non chiusi e rigore?
- 4. Ninject contestuale Binding w/Open Generics
- 5. Generics e java.beans.Introspector
- 6. Java Generics, Generics estese e classi astratte
- 7. Elenca i tipi chiusi che il runtime ha creato da tipi generici aperti
- 8. Apertura Schema.orgOre più volte e giorni chiusi
- 9. Java Generics e numeri
- 10. Java: Instanceof e Generics
- 11. Generics e compareTo() metodo
- 12. GWT e Generics
- 13. Delphi: OleVariant e Generics
- 14. Generics e Class.forName
- 15. C# Generics e Winform
- 16. WCF: Interfacce, Generics e ServiceKnownType
- 17. Autofac con Open Generics e tipo specificato in fase di esecuzione
- 18. Generics Java: la presunzione tipi più di due parametri
- 19. Generics che limita i tipi di Int, doppio, lungo
- 20. Generics non risolvere i tipi di metodo correttamente
- 21. javap e generics 'type erasure
- 22. Generics e convention in C#
- 23. Generics e il punto interrogativo
- 24. Java Generics e Infinity (comparabili)
- 25. Generics in C# con più tipi generici porta a permesso e consentiti ambiguità
- 26. tuple di intervalli continui chiusi
- 27. Java Generics, Can not Convertire da E a E
- 28. Tipo sicurezza, generics Java e query
- 29. API Google Places: POI chiusi?
- 30. Java Generics jolly vs utilizzo tipizzati Generics
Ora un giorno la maggior parte delle domande di intervista che ho affrontato sono state poste dal tuo libro. Quindi, per motivi di chiarimento, ho chiesto. :). – user196546
@generixs: Se qualcuno mi chiedesse che in un'intervista, confesserei che non sarei in grado di dire senza consultare un libro o le specifiche :) Non è una domanda di intervista molto utile, devo dire. –
:) dammi una parte del tuo cervello, in modo che io possa rispondere come se fossi un Jon Skeet .. (mi dispiace per aver scherzato ..). – user196546