Bonjour,
Je vous remercie beaucoup de bien vouloir m'aider à répondre aux questions suivantes
Principe d'invariance:
Ce principe s'applique-t-il uniquement s'il existe un lien d'héritage entre deux types A et B?
Ex:
1 2 3
|
Wrapper<string>stringWrapper;
IWrapper<Object> storedObjectWrapper= stringWrapper; |
Dans ce cas, l'interface IWrapper<T> est invariante et l'instruction IWrapper<Object> storedObjectWrapper= stringWrapper;
renverra une erreur à l'execution.
Or est-ce du fait que le type string est un sous type de Object ou, si j'avais ecrit
1 2
|
IWrapper<int> storedObjectWrapper= stringWrapper; |
cette instruction n'aurait pas pu s'exécuter de toute manière.
Je vous remercie de votre aide sur ce point.
Pouvez-vous m'expliquer pourquoi la restriction liée à l'invariance s'applique aux types génériques et non pas aux types non génériques?
Ensuite, du fait qu'un type est générique, il contient , pour toutes les instances de ce type, les mêmes méthodes(que ce soit dans le cas où le type générique est remplace par le type Object ou qu'il soit remplacé par le type int) .
Pourquoi donc empêcher une telle instruction
IWrapper<Object> storedObjectWrapper= stringWrapper;
Autre point: si on stocke des valeurs de type simple(int, etc...) dans une collection, le compilateur génère du code pour boxer les données .
Pouvez-vous me confirmer que cela ne concerne que les éléments de type valeur et non les éléments de type référence(une telle opération ne s'affectuera pas si je stocke directement des valeurs de type classe ou interface ou de tout type référence).
Je vous en remercie .
Portée d'une lambda expression: j'apprends que si j'affecte une méthode anonyme (par le biais d'une lambda expression)à un delegue nomme del,et que dans le code de cete lambda exprsion je modifie une variable qui a été définie en dehors de la lambda expression, cette variable reste en mémoire jusqu'à ce que toutes les références au délégué del aient disparu.
Cela signifie t-il que cette variable reste en mémoire jusqu'à ce que ce délégué ne pointe plus vers aucune méthode, c'est à dire soit =null
opérateurs unaires + et -: s'agit il des opérateurs qui indiquent qu'un nombre est négatif ou positif?
Par ailleurs, je ne savais pas que les opérateurs true et false sont des opérateurs unaires.
Pouvez vous me donner un exemple de leur utilisation.
Je vous en remercie .
opérateurs de conversion: sont ils simplement tous ceux qui permettent de caster dans un type définiint), (string) etc...?
Que signifie qu'un opérateur est non polymorphe.
Je vous remercie beaucoup de votre aide sur tous ces points .
Bien cordialement.
curieuse_prog
Partager