Opérateurs : Les opérateurs +, > et == sont surchargeables ?
Oui
Seuls certains opérateurs ne le sont pas (= ou new par exemple)
Non
Quelles sont les valeurs par défaut des modificateurs pour les classes, méthodes et
champs : "ex / namespace NS{ class A{void m(){};int n;} }"
classe : public, methode : public, champ : private
classe : public, methode : private, champ : private
classe : internal, methode : private, champ : private
internal : qui signifie, portée limitée à l'assembly
classe : internal, methode : internal, champ : internal
Que signifie "internal" ? Portée limitée...
au fichier
au namespace
à l'assembly
à la classe
Tableaux - soit une classe A ainsi
class A {
public A() { n = 1; }
private int n = 1;
public override string ToString() { return [Link](); }}
dans le Main on code :
A[] tab = new A[10];
for (int i=0; i<[Link]; i++)
[Link](tab[i].ToString());
La sortie est :
pas de sortie, erreur de compilation
une exception en runtime
Une exception en runtime car nous nous adressons aux éléments du tableau et ils sont tous
initialisés à .
1111111111
sortie vide
Comparaison - soit...
string s1 = "abc";
string s2 = "abc";
que valent :
s1==s2
[Link](s2)
true, true
En vertu de l'optimisation de l'allocation des chaines, s1 et s2 sont vraiment le même objet (et
ont donc les mêmes références)
true, false
false, true
false, false
Comparaison - soit…
object o1 = new object()
object o2 = new object()
que valent :
o1==o2
[Link](o2)
false, false
contrairement au cas précédent (string), deux <new> signifient deux objets différents, et donc
deux références différentes
false, true
true, false
true, true
Que peut on déclarer dans une interface ?
- méthode d'instance
- méthode de classe (static)
- propriété
- champ non static
méthode d'instance, méthode de classe, propriété
méthode d'instance, propriété
Aucune implémentation, ni membre de classe.
méthode d'instance, propriété, champ non static
méthode d'instance, champ non static
Héritage - Dans une sous classe quel mot clé permet de référencer la super classe (par
exemple pour appeler son constructeur) :
this
base
super
Différence entre les mots clés const et readonly - choisissez la bonne réponse :
Pas de différence
Un champ readonly peut être modifié dans le constructeur
On déclarera souvent static readonly les champs constants d'une classe
Un champ const peut être modifié dans le constructeur
Un champ readonly est forcément déclaré static
Polymorphisme - si une méthode en redéfinit une autre :
Quel mot clef doit avoir la déclaration dans la sous-classe ?
a - aucun mot clef requis
b - virtual
c - static
d - override
e - new
Quel mot clef doit avoir la déclaration dans la super-classe ?
a - aucun mot clef requis
b - virtual
c - static
d - override
e - new
a et b
b et a
d et b
Virtual est nécessaire pour la méthode à redéfinir. Override est nécessaire pour la méthode qui
redéfinit.
b et d
Exception - les ApplicationException sont des exceptions :
Unchecked (aussi appelées non vérifiées)
Toutes les exceptions sont Unchecked en .Net donc les blocs try/catch ne sont pas
obligatoires.
Checked
Donner les types qui passent par défaut par valeur :
- struct
- int
- string
- object
- int[]
- enum
struct, int
struct, int, enum
struct, int et enum sont des objets dérivé de ValueType int[] est un objet dérivé de
[Link] (ReferenceType)
struct, int, int[]
new - l'emploi de new implique une allocation sur le tas.
VRAI
FAUX
(alloc de struct par new =>pile)
using - using possède deux significations différentes.
VRAI
(import de namespace et utilisation de ressource IDisposable)
FAUX
Une méthode Main peut se déclarer : static int Main().
VRAI
void ou int comme type de retour et string[] ou rien comme paramètre
FAUX
Libération mémoire - nous pouvons créer des destructeurs en C# ainsi :
public ~A()
public void Finalize();
public override void Finalize();
Avec .Net le code qui s'exécute est géré par :
la JVM
le SDK
le GC
la CLR
... ou Common Language Runtime.
Si l'on ne fournit pas de constructeur, le compilateur en génère un lui même.
VRAI
"c'est un constructeur public sans argument on l'appelle le constructeur par défaut"
FAUX
L'utilisation d'un delegate implique celle d'un event.
VRAI
FAUX
event simplifie l'utilisation du delegate mais n'est en rien obligatoire
Utilisation de if. Soit le code :
int n = 1;
if (n) produit
une erreur de compilation
Seul un type booléen est toléré dans le if.
une exception en runtime
un résultat vrai
un résultat faux
Conversion :
short s = 0;
s = s+ 1; …
est correct
est incorrect
(pas de cast implicite int => short)
Condition
int a=1;
int b=2;
après le test suivant if ((a-- == 0) && (--b == 0))
a=0 et b=1
a=1 et b=1
a=0 et b=2
(par la règle du court circuit)
a=1 et b=2
Héritage - dites tout ce qui est vrai :
a - une classe peut hériter d'une autre classe
b - une classe peut hériter de plus d'une autre classe
c - une classe peut implémenter une interface
d - une classe peut implémenter plus d'une interface
e - une interface peut hériter d'une autre interface
f - une interface peut implémenter une classe
a, b, c, d
a, c, d
a, c, d, e
Héritage simple et implémentation multiple.
a, c, e, f
Collections - dites tout ce qui est vrai :
Dans ma collection ArrayList...
a - je peux mettre un string
b - je peux mettre un int
c - je peux mettre un autre ArrayList
a, c
a, b, c
Les int sont aussi des objets en C# (boxing).
Générics - Une interface peut être générique.
ex : interface Iqqch <T> { … }
VRAI
La classe qui l'implémente peut être ou non générique
FAUX