Il existe de nombreuses "versions" du .NET Framework :
- Complet ("normal")
- Sous-ensemble de profil client
- Silverlight dans les navigateurs Web
- "Silverlight" sur Windows Phone
- Cadre compact
- WinRT
Lorsque le code C # est nécessaire sur une nouvelle plate-forme, il semblerait que Microsot préfère prendre le CLR complet et le découper en un petit sous-ensemble, créant de nouveaux assemblys et déplaçant des types, au lieu d'utiliser simplement des assemblys existants tels que ceux de la BCL . Silverlight, par exemple, a des classes / méthodes différentes de WPF (même jusqu'à certaines méthodes ayant des signatures légèrement différentes ou des implémentations très différentes), au lieu de simplement référencer la même implémentation de List<T>
WPF.
S'agit-il de l'architecture idéale ou d'un signe d'héritage? Le BCL ne devrait-il pas fonctionner sur toutes les plates-formes, avec juste des bibliothèques de présentation / IO différentes sur chacune? Ou la BCL et les autres bibliothèques sont-elles trop gonflées, et leur séparation créerait trop de problèmes de compatibilité descendante, pour être acceptable?
Si nous partions d'un canevas vierge et ne nous inquiétions pas de la compatibilité descendante, la situation actuelle serait-elle vraiment la meilleure façon de gérer plusieurs plates-formes?
la source
Réponses:
Ce que fait Microsoft, diviser les routines en plusieurs packages, est courant. Il existe une version de .NET qui s'exécute sur des ordinateurs à carte unique (.Net Micro Framework) avec une mémoire limitée. Il ne serait pas logique d'inclure dans cette version tout ce qui est nécessaire pour exécuter une interface utilisateur graphique complète par exemple.
Si vous regardez Apple, l'iPhone ne contient pas toutes les routines que l'on trouverait sur un Mac.
la source
List<T>
créer Micro FrameworkList<T>
, la BCL ne devrait-elle pas être divisée correctement de sorte que les binaires s'exécutent sur toutes les plates-formes?List<T>
mais cela peut élaguer certaines choses du code ou fusionner avec des choses spécifiques à la plate-forme et produire un élément de déploiement.Je ne pense pas que .NET soit le problème. Bien qu'il existe différents temps d'exécution, ils sont toujours compatibles, c'est pourquoi des technologies telles que les bibliothèques de classes portables fonctionnent (pour la majorité des temps d'exécution que vous avez répertoriés).
Pourquoi est-ce nécessaire? Tant qu'ils sont tous compatibles (voir à nouveau les bibliothèques de classes portables), cela ne devrait pas avoir d'importance, car le BCL fait partie du runtime lui-même et est distribué en tandem.
la source
List<T>
et l'exécute uniquement sur n'importe quelle plate-forme sans créer de bibliothèque portable? Ou ne devrait-il pasList<T>
être lui-même dans une bibliothèque portable? Les bibliothèques portables me semblent être une solution de contournement plutôt qu'une partie d'un design élégant..NET remplace et développe essentiellement les objets com dans un environnement Windows. Il est également utilisé pour identifier un grand nombre de technologies très différentes, imaginez que si Adobe renommait tous ses produits pour avoir un mot commun en leur nom, c'est en quelque sorte ce qui se passe avec .NET
la source